Keychain/ru

В этом документе описано использование общих ключей SSH вместе с программой keychain. Предполагается базовое знание криптографии с открытым ключом.

Рассматриваемая проблема
Необходимость вводить логин и пароль для каждого в каждой системе неудобна, особенно если под управлением находится множество систем. У некоторых администраторов, возможно, даже имеется скрипт или cron-задача, которые упрощают использование ssh соединения. Так или иначе, у этой проблемы есть решение, и оно начинается с аутентификации с открытым ключом.

Как работает аутентификация с открытым ключом?
Предположим, что клиент хочет соединится с ssh демоном на сервере. Клиент сначала генерирует пару ключей и пересылает открытый ключ на сервер. Затем, когда бы клиент ни пытался соединиться с сервером, сервер отправляет послание, которое зашифровано с помощью открытого ключа. Только обладатель соответствующего закрытого ключа (т.е. клиент) способен его расшифровать, так что, правильный ответ ведет к успешной аутентификации.

Генерация ключевой пары
The first step is to create a key pair. To do this, use the command:

Примите значения по умолчанию, и удостоверьтесь, что ввели надежную фразу-пароль.

После завершения генерации закрытый ключ должен быть в и открытый ключ в. Открытый ключ теперь готов для копирования на удаленный хост.

Подготовка сервера
The file needs to be copied over to the server running. It has to be added to the file that belongs the connecting user on the remote server. After access to the server has been granted by infrastructure personnel, the following steps can be used to setup automatic login using a public key on the remote server:

Вывод команды из последней строки должен отобразить содержимое файла. Убедитесь, что этот вывод выглядит корректно.

Тестирование настройки
Theoretically, if all went well, and the daemon on the server allows it (as this can be configured),  access without entering a password should now be possible on the server. The private key on the client will still need to be decrypted with the passphrase used previously, but this should not be confused with the password of the user account on the server.

It should have asked for a passphrase for, and then grant access via as the user   on the server. If not, login as, and verify that the contents of  has each entry (which is a public key) on a single line. It is also a good idea to check the sshd configuration to make sure that it allows to use public key authorization when available.

В этом месте, читающий возможно подумает: "Какая разница, я просто заменил один пароль на другой?!" Успокойтесь, в следующем разделе будет продемонстрировано, как мы можем использовать это, чтобы вводить фразу-пароль только один раз и повторно использовать (расшифрованный) ключ для многократного входа.

Обычное управление ключами с помощью ssh-agent
The next step is to decrypt the private key(s) once, and gain the ability to ssh freely, without any passwords. That is exactly what the program is for.

is usually started at the beginning of the X session, or from a shell startup script like. It works by creating a unix-socket, and registering the appropriate environment variables so that all subsequent applications can take advantage of its services by connecting to that socket. Clearly, it only makes sense to start it in the parent process of an X session to use the set of decrypted private keys in all subsequent X applications.

When running, it should output the PID of the running ssh-agent, and also set a few environment variables, namely SSH_AUTH_SOCK and SSH_AGENT_PID. It should also automatically add to it's collection and ask the user for the corresponding passphrase. If other private keys exist which need to be added to the running ssh-agent, use the command:

А теперь начинается магия. С готовым расшифрованным закрытым ключом, наконец, можно получить доступ к серверу (с настроенным открытым ключом) по ssh без ввода какого-либо пароля:

Для того, чтобы выключить SSH-агент (после чего снова потребуется вводить фразу-пароль позже):

To get even more convenience from ssh-agent, proceed to the next section on using keychain. Be sure to kill the running ssh-agent as keychain will handle the sessions itself.

Выжимание последней капли удобства из ssh-agent
Keychain позволит использовать ssh-agent заново между входами в систему, и, дополнительно, запрашивать фразу-пароль каждый раз, когда входит пользователь. Давайте сначала установим его:

Assuming that was successful, can now be used. Add the following to the file to enable it:

Теперь протестируем это. Сперва, убедитесь, что завершен процесс ssh-agent из предыдущего раздела, затем откройте новую оболочку, обычно простым входом, или открытием нового эмулятора терминала. Должен быть запрошен пароль для каждого ключа, который был указан в командной строке. Все оболочки открытые после этого, должны использовать ssh-agent заново, позволяя использовать беспарольное ssh соединение снова и снова.

Использование keychain с KDE
KDE пользователи, вместо использования, могут позволить KDE управлять программой ssh-agent за место них. Для того, чтобы это сделать, необходимо отредактировать файл, который читается во время запуска KDE, и , который запускается во время закрытия KDE. Здесь показано, как можно отредактировать эти файлы:

Теперь, все, что необходимо сделать, это запустить эмулятор терминала по вкусу, например Konsole, и загрузить нужную связку ключей для использования. Например:

Ключи будут запомнены до окончания KDE сессии (или пока не завершите процесс ssh-agent вручную).

Using keychain with Plasma 5
As above for KDE 4 except replace with.

Соображения безопасности
Конечно же, использование ssh-agent может немного ухудшить безопасность системы. Если бы другой пользователь получил доступ к запущенной командной оболочке, он смог бы войти на все серверы без пароля. В результате, это является риском для серверов, и пользователи должны быть уверены в том, что они проконсультировались с местной политикой безопасности. Будьте уверены в том, что приняли все необходимые меры для обеспечения безопасности во всех сессиях.

Устранение проблем
Большинство из описанного должно работать хорошо, но если все-таки столкнулись с проблемами, то следующие пункты могут помочь.


 * Если не можете соединиться без, попробуйте использовать ssh с опцией , чтобы узнать что произошло. Иногда, сервер не настроен для использования аутентификации с открытым ключом, иногда он настроен на запрашивание локальных паролей в любом случае! Если это как раз тот самый случай, попробуйте использовать с  параметр  , или изменить файл конфигурации  на сервере.
 * Если подключение при использовании или  не работает, то это может быть потому что используемая командная оболочка не понимает используемые команды. Проконсультируйтесь с man-страницами для программ ssh-agent и keychain для поиска подробностей по работе с другими оболочками.

Внешние ресурсы

 * The official Keychain project page at Funtoo.org.
 * IBM developerWorks article series introducing the concepts behind Keychain.