Keychain/ru

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

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

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

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

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

You should now have a private key in and a public key in. We are ready to copy the public key over to the remote host.

Подготовка сервера
We will be copying the file over to the server that runs sshd. We will also be adding it to the file that belongs the connecting user on that server. Here's an example of how to do that if you already have ssh access to the server.

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

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

Hopefully, it asked you for your passphrase for id_rsa, and you were able to gain ssh access as server_user on the server. If not, login as server_user, and verify the contents of to make sure each entry is on a single line. You might also want to check the sshd configuration to make sure that it prefers to use public key authorization when available.

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

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

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

When you run ssh-agent, it should tell you the PID of the running ssh-agent, and also set a few environment variables, namely  and. It should also automatically add to it's collection and ask you for the corresponding passphrase. If you have other private keys you want to add to the running ssh-agent, you can use the  command as follows:

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

Было бы неплохо узнать как закрыть ssh-agent, в случае если вам это потребуется, правда?

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

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

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

Enabling keychain in .bash_profile

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

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

Редактирование /etc/kde/startup/agent-startup.sh

Редактирование /etc/kde/shutdown/agent-shutdown.sh

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

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

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

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


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

Благодарности
Мы хотели бы поблагодарить следующих авторов и редакторов за их вклад в это руководство:


 * Eric Brown
 * Marcelo Goes
 * nightmorph