Keychain/ru

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

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

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

Генерация ключевой пары
Сперва необходимо создать ключевую пару. Для этого воспользуйтесь командой :

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

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

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

это скрипт-обвертка для этих шагов. Если он недоступен, то можно воспользоваться следующими командами:

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

Тестирование настройки
В теории, если всё прошло успешно, а -демон на сервере это позволяет (как это может быть настроено), подключение по к серверу без ввода пароля должно быть уже возможно. Закрытый ключ клиента всё равно будет необходимо дешифровать ключевой фразой, указанной ранее, однако не следует её путать с паролем учетной записи пользователя на сервере.

Будет запрошена ключевая фраза для, после чего будет предоставлен доступ к серверу по для пользователя. Если этого не произошло, подключитесь под пользователем  и проверьте, что в  каждая запись (открытый ключ) находится на отдельной строке. Также неплохо будет проверить конфигурацию sshd и убедиться, что он позволяет использование авторизации с открытым ключом, если тот доступен.

К этому моменту читатель, возможно, подумает: «А в чём смысл, я же просто заменил один пароль на другой?!» Не переживайте, в следующем разделе мы покажем, как можно вводить ключевую фразу всего один раз, а затем повторно использовать (расшифрованный) ключ для многократных подключений.

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

обычно запускается вначале X-сессии или из скрипта, который стартует при запуске оболочки (например, ). Она работает путем создания Unix-сокета и регистрации подходящих переменных среды, чтобы все последующие приложения могли воспользоваться её услугами, подсоединяясь к этому сокету. Очевидно, имеет смысл запускать её в родительском процессе X-сессии, чтобы набор расшифрованных закрытых ключей стал доступным для всех последующих X-приложений.

При запуске должен сообщить PID запущенного экземпляра, а также установить несколько переменных среды, а именно SSH_AUTH_SOCK и SSH_AGENT_PID. Он также должен автоматически добавить к своему набору и запросить у пользователя соответствующую ключевую фразу. Если есть другие закрытые ключи, которые необходимо добавить к запущенному ssh-agent, воспользуйтесь командой :

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

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

Чтобы с ssh-agent было еще более удобней работать, продолжайте читать следующую главу, которая описывает использование keychain. Убедитесь, что завершили запущенный ssh-agent, так как keychain обрабатывает сессии самостоятельно.

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

После успешной установки готов к использованию. Добавьте следующие строки в файл для того, чтобы включить его:

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

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

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

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

Использование keychain с Plasma 4
Единственным отличием от Plasma 5 является другое расположение файлов: вместо следует использовать.

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

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


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

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

 * Официальная страница проекта Keychain на Funtoo.org
 * Серия статей IBM developerWorks описывающая концепции, стоящие за Keychain.