metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2010-09-05 12:04 pm

ssh-agent и разные сессии

Часто приходится ходить на разные сервера ssh и влом вводить passphrase для ключа каждый раз. Для этого используется ssh-agent, который хранит оные ключи в себе и раздает их ssh по мере надобности. Но дело в том, что для взаимодействия с ним используется сокет, созданный с именем /tmp/ssh-херпобедичтоagent.PID. И чтобы ssh его видел, нужно чтобы в окружении наличествовала переменная SSH_AUTH_SOCK с этим именем.
А я постоянно открываю с виндового ssh клиента новые сессии на линукс (разные проги в разных окнах, переключаться так проще, чем через screen их запускать, итд) и в них этой переменной нет. В принципе, вызывать export SSH_AUTH_SOCK=/tmp/ssh-херпобедичто/agent.PID особой проблемы нет, но мне интересно, нет ли какого способа делать это автоматом.
С ходу вижу только способ типа "запускать ssh-agent скриптом, который из его вывода создает еще один скрипт, а этот второй скрипт вызывается из .profile при логине и ставит нужные переменные". Но что-то сильно похоже на метапрограммирование закат солнца вручную.

[identity profile] metaclass.livejournal.com 2010-09-05 12:41 pm (UTC)(link)
по дате сортировать пока лень, сделал так:
export SSH_AUTH_SOCK=`find /tmp -regex /tmp/ssh-.*agent.*`

[identity profile] avnik.livejournal.com 2010-09-05 01:42 pm (UTC)(link)
К find надо еще добавить проверку на "мое". Иначе у тебя будет агент последнего зашедшего, и на него скорее всего будет стоять 600

[identity profile] metaclass.livejournal.com 2010-09-05 01:48 pm (UTC)(link)
Ага, надо. Но для начала сойдет и так, там никого кроме меня нету.

[identity profile] metaclass.livejournal.com 2010-09-05 01:49 pm (UTC)(link)
А, кстати, find тех что с 600 пропустит, выдав сообщение в stderr и они в его вывод не попадут.