SSH аутентификация при помощи открытого ключа
Материал из DiPHOST.Ru wiki system
SSH широко используется для безопасного доступа к удалённым системам. Большинство использующих SSH знакомы с обычной аутентификацией при помощи пароля. Это самый лёгкий, доступный по умолчанию, способ аутентификации пользователя. Но у него есть ряд недостатков, включающих проблемы безопасности, простоту и удобство использования. В протоколе SSH существует несколько удобных возможностей, позволяющих решить эти проблемы.
Доступ по паролю
SSH обеспечивает обычный доступ с использованием логина и пароля.
Для примера рассмотрим подключение с домашнего компьютера пользователя HOME к серверу SERVER:
- Пользователь при помощи программы-клиента SSH - ssh-client , например PuTTY, устанавливает соединение с сервером. Происходит проверка и аутентификация сервера - сервер передаёт свой публичный ключ, устанавливается защищённое соединение. Обычно ssh-client просит запомнить публичный ключ сервера и при каждом последующем подключении отслеживает соответствие сохранённого ключа переданному для проверки подлинности сервера.
- ssh-client передаёт по установленному защищённому соединению имя пользователя серверу. В отличии от Telnet, в SSH передача имени пользователя входит в состав протокола. ssh-client или уже настроен с определённым именем пользователя или предлагает ввести его.
- В ответ на имя пользователя сервер посылает обратно запрос пароля.
- ssh-client предлагает пользователю ввести пароль и после ввода отсылает его на сервер по установленному ранее защищённому каналу.
- Сервер сравнивает присланный пароль с имеющимся у него в базе пользователей, и, если он совпадает, предоставляет пользователю регламентированный доступ.
Самым большим преимуществом использования пароля для доступа является простота настройки и использования - обычно это всё доступно по умолчанию. Однако, пароль приходится вводить каждый раз, пароль может ввести кто угодно, невозможно дать доступ под одним именем пользователя разным людям с разными паролями. Да и необходимость иметь разные пароли к разным системам не способствует выбору "сильных" паролей.
Доступ по ключу
Но у нас есть хорошая новость - SSH поддерживает аутентификацию по открытому ключу. Пользователь создает пару ключей - секретный и публичный, и устанавливает открытый ключ в файле $HOME/.ssh/authorized_keys на целевом сервере (верно для современных версий OpenSSH). Публичный ключ - открытая информация, которую можно не охранять. А секретный ключ защищен на пользовательском компьютере, (мы надеемся), сильным паролем, или вообще находится на сменном хорошо защищённом носителе, например на флэшке.