Блог Олега Сердюкова

Аутентификация по публичным ключам с использованием ssh-agent

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

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

$ ssh-keygen -t dsa
Generating 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 ctrld@129-149-179-94.pool.ukrtel.net
The key's randomart image is:
+--[ DSA 1024]----+
|++* .            |
|+=.*             |
|o+oo. o          |
|  * .. +         |
| . + oo S        |
|  . o ..E        |
|     . .         |
|      .          |
|                 |
+-----------------+

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

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

$ cat ~/.ssh/id_dsa.pub
ssh-dss AAAAB3...60QnQ== ctrld@hostname.local

Идём на удалённую машину и записываем этот публичный ключ в ~/.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 -x
Enter lock password:
Again:
Agent locked.

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

$ ssh-add -X
Enter lock password:
Agent unlocked.

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

$ eval `ssh-agent`

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

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

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

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

Comments