OpenSSH. Часть 5. Вход без пароля.

Вводить пароли утомительно, особенно если они состоят из нескольких слов, но ведь можно использовать OpenSSH для открытия подключений без ввода пароля (но при этом сохранить защиту подключения). Для этого существуют следующие приложения — ssh-agent и keychain. Расмотрим каждую из них.

Использование ssh-agent.

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

$ ssh-agent bash

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

$ ssh-add
Enter passphrase for /home/jenn/.ssh/idrsa:
Identity added: /home/jenn/.ssh/idj-sa (/home/jenn/.ssh/idrsa)
Enter passphrase for /home/jenn/.ssh/apache_key:
Identity added: /home/jenn/.ssh/idrsa (/home/jenn/.ssh/apachekey)

В дальнейшем вы сможете войти на любой хост 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: Web Feb 7 18:28:20 2004 from windbag.test.net
jennOpowerpc:~$

Чтобы завершить работу 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:ld:00:c7:a8:e9:fe:23:d8 /home/jenn/.ssh/apachekey (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/iddsa (/home/jenn/.ssh/idjdsa.pub)

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

$ ssh-add -D
All identities removed.

Использование keychain.

Программа ssh-agent неплоха, но пользователю приходится вводить пароль при каждом открытии нового командного процессора. С выходом вся введенная информация теряется. Кроме того, ssh-agent не позволяет использовать беспарольную пересылку данных SSH с cron.
Чтобы решить эти проблемы можно воспользоваться программой keychain, которая сохраняет пароли SSH на общесистемном уровне вплоть до перезагрузки. keychain также работает совместно с cron. Загрузите и установите keychain из обычных источников в формате RPM, .deb или в виде исходных текстов. Затем отредактируйте локальный файл ~/bash_profile и добавьте следующие строки:

keychain iddsa
. ~/.keychain/$HOSTNAME-sh

Укажите фактическое имя закрытого ключа: idjrsa, my_own_groovy_key и т. д. Обратите внимание на начальную точку во второй строке; она приказывает Bash прочитать файл, имя которого указано в этой строке. Вот и все. Теперь после входа на локальную рабочую станцию на экране появится запрос на ввод пароля от keychain. В дальнейшем keychain будет обеспечивать аутентификацию вплоть до перезагрузки системы.
В файле можно указать столько ключей, сколько вы собираетесь использовать:

keychain iddsa apachekey ftpkey

Для каждого ключа при входе в систему необходимо ввести пароль. Программа keychain будет обеспечивать аутентификацию в течение всего времени работы системы, даже при выходе и повторном входе пользователя в систему. После перезапуска системы пароли придется ввести заново.

Предыдущие части.

Часть 1. Введение.
Часть 2. Настройка.
Часть 3. Построение новых ключей хостов
Часть 4. Использование нескольких пар ключей