В интернете полно инструкций как настроить SSH аутентификацию по ключам на сервере Linux. Но каждый раз при настройке мне приходится искать их заново, потому что некоторые нюансы я забываю. Поэтому оставлю тут эту инструкцию в первую очередь для себя и добавлю полезную информацию о журналах отпечатков (fingerprint) ключей, которая нигде не встречается.
Итак, чтобы подключится к *Nix хосту через SSH, нужно предоставить серверу пару: логин + пароль, или логин + ключ. Настройка SSH аутентификации по ключам не только повышает уровень защищенности сервера, но и упрощает жизнь администратору за счет более удобного подключения к серверу. Вместо использования пароля, который может быть перехвачен кейлогером или подсмотрен, мы будет использовать ключи RSA. Для обеспечения достаточного уровня безопасности будем использовать длину ключа 2048 бит. Желательно хранить закрытый ключ на зашифрованном разделе (Bitlocker, EFS), тем самым вы защититесь от кражи закрытого файла с ключом.
Создание SSH ключей для Putty
Для подключения к серверам Linux из Windows я предпочитаю использовать старый-добрый клиент PuTTy. В состав пакета поставки putty входит небольшая утилита puttygen, которая может быть использована для генерации RSA и DSA ключей. Скачайте утилиту с официального сайта https://the.earth.li/~sgtatham/putty/latest/x86/puttygen.exe и запустите ее. В окне PuTTy Key Generator нажмите кнопку Generate и произвольно подвигайте мышкой для создания некой рандомной последовательности. Утилита сгенерирует пару ключей: открытый и закрытый.
Нам интересны следующие возможности интерфейса
Key passphrase | Здесь можно указать пароль для защиты закрытого ключа |
Save public key | Кнопка для сохранения открытого ключа в файл, который нужно будет поместить на удаленный сервер |
Save private key | Кнопка для сохранения закрытого ключа Файл с закрытым ключом должен храниться на клиенте (желательно защищённом) и будет использоваться для подключения к удаленному серверу. |
SSH-2 RSA 2048 | Указывается тип ключа и его длина. В нашем примере достаточно будет выбрать SSH-2 RSA. |
Формат файла ключа, который генерирует утилита puttygen напрямую не подходит для openssh, который запушен на моем сервере. Поэтому мне придется скопировать в буфер значение открытого ключа из окна puttygen в буфер обмена (я выделил его на скриншоте выше). Этот код нужно будет поместить в файл на сервере. Но также сохраните открытый и закрытый ключи в 2 файла с помощью соответствующих кнопок.
Настройка SSH на Linux для аутентификации с помощью ключей
В большинстве дистрибутивов Linux уже настроена поддержка аутентфикации с помощью сертификатов. Откройте конфигурационной файл сервера SSH (/etc/ssh/sshd_config) и раскомментируйте или добавьте следующие стройки:
HostKey /etc/ssh/ssh_host_dsa_key
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
Перезапустите SSH командой:
# /etc/init.d/sshd restart
Затем создадим файл с ключом на сервере:
# mkdir ~/.ssh
# chmod 0700 ~/.ssh
# touch ~/.ssh/authorized_keys
# chmod 0644 ~/.ssh/authorized_keys
В файл authorized_keys нужно вставить ключ, скопированный из окна puttygen и сохранить его.
Затем на стороне клиента откройте Putty и перейдите в раздел Connection -> SSH -> Auth. Нажмите кнопку Browse и укажите путь к закрытому ключу, который вы сохранили ранее (расширение.ppk)
Открытый ключ, который вы сохранили на сервер, может быть использован для аутентификации на множестве серверов. Т.е. для каждого нового сервера не нужно генерировать новую пару ключей.
Теперь можно подключиться к серверу (нет необходимости перезапускать демона sshd).
Укажем только имя пользователя (в нашем случае это root).
Наличие строки « Authenticating with public key «rsa-key-20161208″» говорит о том, что вы успешно аутентифицировались с помощью ключа RSA.
Журнал подключений по SSH с помощью ключей
Как правило, администратор должен знать, когда и какой ключ или сертификат использовался для подключения к серверу. Однако, в большинстве дистрибутивов эта информация в журналах не отображается. Однако, к примеру, в CentOS 7 со стандартными настройками и уровнем журналирования INFO, отпечатки ключей сохраняются в журнал (# cat /var/log/secure).
В том случае, если в вашем журнале нет этой информации, исправить это не сложно. Отредактируйте конфигурационный файл /etc/ssh/sshd_config, изменив уровень журналирования:
LogLevel VERBOSE
И перезапустите sshd:
# /etc/init.d/sshd restart
Попробуйте еще раз подключится к серверу по SSH с помощью ключа и проверьте журнал:
# cat /var/log/secure
May 20 12:23:17 server sshd[8746]: Connection from 192.168.10.15 port 60162
May 20 12:23:19 server sshd[8746]: Found matching RSA key: 5b:7b:2a:14:29:11:bf:3a:8f:bd:24:99:21:34:cd:e6
May 20 12:23:19 server sshd[8746]: Postponed publickey for root from 192.168.10.15 port 60162 ssh2 [preauth]
May 20 12:23:19 server sshd[8746]: Found matching RSA key: 5b:7b:2a:14:29:11:bf:3a:8f:bd:24:99:21:34:cd:e6
May 20 12:23:19 server sshd[8746]: Accepted publickey for root from 192.168.10.15 port 60162 ssh2
May 20 12:23:19 server sshd[8746]: pam_unix(sshd:session): session opened for user root by (uid=0)
Как видите, теперь в журнале отображается отпечаток ключа, позволяющий идентифицировать пользователя.