Как я сказал ранее, к аутентификации по публичным ключам нужно подходить ответственно. Ставить пустой passphrase грозит компрометацией ваших удалённых хостов. А каждый раз вводить passphrase не всегда возможно. Для того, чтобы достигнуть разумного компромиса, используется ssh-agent. Это программа, хранящая приватные ключи, используемые для аутентификации по публичным ключам RSA/DSA.

Генерируем ключ (для простоты я предварительно удалил все ключи, так как некоторые были без passphrase). Будем использовать DSA, любители RSA могут посмотреть разницу в предыдущей статье. Обязательно указываем хорошую passphrase:

$ ssh-keygen -t dsaGenerating public/private dsa key pair.Enter file in which to save the key (/Users/ctrld/.ssh/id_dsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /Users/ctrld/.ssh/id_dsa.Your public key has been saved in /Users/ctrld/.ssh/id_dsa.pub.The key fingerprint is:12:1b:02:27:8b:70:44:0b:2c:3f:9c:4b:d0:ef:d9:5e [email protected] key's randomart image is:+--[ DSA 1024]----+|++* .            ||+=.*             ||o+oo. o          ||  * .. +         || . + oo S        ||  . o ..E        ||     . .         ||      .          ||                 |+-----------------+

Делаем по аналогии с предыдущей статьёй.

Копируем ключ

$ cat ~/.ssh/id_dsa.pubssh-dss AAAAB3...60QnQ== [email protected]

Идём на удалённую машину и записываем этот публичный ключ в ~/.ssh/authorized_keys2 (желательно удалить из него ваши старые ключи):

$ vi ~/.ssh/authorized_keys2$ chmod 600 ~/.ssh/authorized_keys2

Выходим, проверяем работу. А вот теперь удивляемся :-) ssh-agent и так запущен на Mac OS X, и мы получаем окошко, в котором вводим ключ, причём его можно запомнить в keychain:

Теперь, несмотря на то, что ваш ключ использует passphrase, она не будет запрашиваться. Я не могу сейчас ответить, сколько именно времени он не будет запрашиваться.

Если же вы уходите, но по какой-то причине даёте поработать кому-то на вашем Маке, да ещё под вашим account’ом (ладно, пример неудачный, этот кто-то может попытаться посмотреть ваш keychain, и если он не запаролен, то узнает ваш ключ), то можете заблокировать доступ к ssh-agent, и при попытке соединения будет снова запрашиваться passphrase.

Блокировка (нужно указать любой пароль):

$ ssh-add -xEnter lock password: Again: Agent locked.

Разблокировка (с запросом установленного пароля)

$ ssh-add -XEnter lock password: Agent unlocked.

Если вдруг ssh-agent не запущен, то его можно запустить самому (детальнее – в “SSH and ssh-agent“):

$ eval `ssh-agent`

Перечень всех добавленных ключей:

$ ssh-add -l1024 12:1b:02:27:8b:70:44:0b:2c:3f:9c:4b:d0:ef:d9:5e /Users/ctrld/.ssh/id_dsa (DSA)

Ручное добавление ключей из ~/.ssh:

$ ssh-addEnter passphrase for /Users/ctrld/.ssh/id_dsa: Identity added: /Users/ctrld/.ssh/id_dsa (/Users/ctrld/.ssh/id_dsa)