17.6. Вход без пароля с использованием ssh-agent

Проблема

Вводить пароли утомительно, особенно если они состоят из нескольких слов. Требуется использовать OpenSSH для открытия подключений без ввода пароля, сохраняя при этом защиту подключения.

Решение

Начните с настройки открытого и закрытого ключей (см. раздел 17.3), а затем воспользуйтесь ssh-agent. Эта программа обрабатывает запросы на аутентификацию при подключении к различным системам через SSH. Пароль вводится только один раз, в начале сеанса SSH; после выхода из сеанса его потребуется ввести заново. ssh-agent не позволяет запланировать пересылку данных через SSH — о том, как это делается, рассказано в разделе 17.8.

Прежде всего, запустите ssh-agent с указанием используемого командного процессора:

$ ssh-agent bash

После появления стандартного приглашения запустите утилиту ssh-add, которая загружает все ключи из каталога ~/.ssh:

$ ssh-add
Enter passphrase for /home/jenn/.ssh/id_rsa:
Identity added: /home/jenn/.ssh/id_rsa (/home/jenn/.ssh/id_rsa)
Enter passphrase for /home/jenn/.ssh/apache_key:
Identity added: /home/jenn/.ssh/id_rsa (/home/jenn/.ssh/apache_key)

Теперь вы сможете подключаться к любому хосту SSH без повторного ввода пароля:

jenn@windbag:$ ssh powerpc
Linux powerpc 2.4.21 #1 Sun Aug 3 20:15:59 PDT 2003 i686 GNU/Linux
Libranet GNU/Linux
Last login: Wed Feb 7 18:28:20 2004 from windbag.test.net
jenn@powerpc:~$

Чтобы завершить работу ssh-agent, просто выйдите из командного процессора, запущенного через ssh-agent:

$ exit

Комментарий

Поскольку пароли и ключи ассоциируются с конкретным процессом Bash, при выходе из командного процессора ssh-agent они пропадают. Если запустить второй командный процессор для другой копии ssh-agent, пароль придётся вводить заново, даже если первый процесс остаётся активным.

Чтобы узнать, какие ключи использует ssh-agent, введите команду:

$ ssh-add -l
1024 65:91:77:71:24:66:46:ea:cb:00:fe:83:ad:b8:4a:34 /home/jenn/.ssh/id_rsa (RSA)
1024 da:f7:27:6a:37:4e:a5:bb:1d:00:c7:a8:e9:fe:23:d8 /home/jenn/.ssh/apache_key (RSA)

Чтобы команда сработала, необходимо вернуться к локальному командному процессору ssh-agent и не быть подключённым к удалённому хосту. При подключении работой терминала управляет удалённый хост, и вы получите сообщение об ошибке «Could not open a connection to your authentication agent».

Команда ssh-add позволяет загружать конкретные ключи:

$ ssh-add /home/jenn/adminkeys/id_rsa_http

и удалять ключи из активного сеанса ssh-agent (при этом ключ не удаляется из системы):

$ ssh-add -d /home/jenn/.ssh/id_dsa
Identity removed: /home/jenn/.ssh/id_dsa (/home/jenn/.ssh/id_dsa.pub)

Следующая команда удаляет все ключи:

$ ssh-add -D
All identities removed.

Использование ssh-agent и ssh-add значительно облегчает процесс входа на удалённые серверы и позволяет безопасно хранить пароли в пределах сеанса. Это особенно полезно для администраторов, которые часто подключаются к разным серверам, так как сохраняет конфиденциальность ключей и избавляет от необходимости многократного ввода пароля. Также, ssh-agent поддерживает гибкость: ключи можно добавлять, удалять или использовать на определённых хостах.

См. также

ssh(1), ssh-add(1), ssh-agent(1).