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

Введение

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

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

Генерация пары ключей RSA

Механизм авторизации по ключу прост. На то место куда мы подключаемся нам надо повесить замок (публичный ключ название.pub) а сам ключик с помощью которого мы сможем подключится (приватный ключ название) держать у себя и с помощью его открывать замочек. Мало того, замок вешается не на всю систему а именно на конкретного пользователя под которым мы будем авторизовываться.

Можно не указывать путь куда мы будем устанавливать ключи и тогда они создадутся в папке по умолчанию с базовым названием. Я не буду менять путь по умолчанию для ключей а лишь буду создавать их со своим удобным мне названием.

Создадим связку ключей указав тип -t rsa, длину ключа -b 2048 и место с необходимым нам названием:

ssh-keygen -t rsa -b 2048 -f /home/user/.ssh/rsa_sevo44
= вывод команды =
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/user/.ssh/rsa_sevo44.
Your public key has been saved in /home/user/.ssh/rsa_sevo44.pub.
The key fingerprint is:
SHA256:A9d+2cz6M1GK482oOxf/zweqt9B18WPox04m+Deczgc user@H4530
The key's randomart image is:
+---[RSA 1024]----+
| |
| . |
| . . . . |
| o . =. +|
| S . oo==o|
| . o*oE..|
| .oo@.O.|
| ..B.&*o|
| +B.o+BO|
+----[SHA256]-----+

По результату видим что создалась пара ключей с названием rsa_sevo44.

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

Настройка SSH сервера

Настройка сервера на всех системах Linux сводится к редактированию конфигурационного файла ssh сервера. Данный пример файла от системы CentOS 7 но и у других тоже самое:

mcedit /etc/ssh/sshd_config
= необходимые параметры с пояснениями =
RSAAuthentication yes
PubkeyAuthentication yes
PubkeyAcceptedKeyTypes ssh-dss
#Путь к файлу с публичными ключами
AuthorizedKeysFile %h/.ssh/authorized_keys
#Отключение возможности авторизации по паролю
PasswordAuthentication no
#Вид публичного ключа для авторизации
PubkeyAcceptedKeyTypes ssh-rsa

Не советую сразу отключать подключение по паролю. Отключите его только после проверки авторизации по ключу!

Перезагрузим сервер SSH:

systemctl restart ssh

Добавление публичного ключа RSA

Используем для добавления публичного ключа команду указав необходимый ключ и пользователя куда мы хотим повесить замок:

ssh-copy-id -i /home/user/.ssh/rsa_sevo44.pub root@10.10.0.1
= вывод команды =
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user/.ssh/rsa_sevo44.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@10.10.0.1's password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh 'root@10.10.0.1'"
and check to make sure that only the key(s) you wanted were added.

После введения пароля от пользователя к которому мы хотим повесить публичный ключ он добавится в список который находится в файле /root/.ssh/authorized_keys.

Проверим добавление ключа на сервере:

cat /root/.ssh/authorized_keys
= вывод команды =
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDCHkWoBv8b+j11IJ685m4WrYCdgx/v5bqwC3AahFyySH4yK0CV8ZJA7H6e3bbkPEI1Aw2xB6xRUS7NC4B3dGciDycMJJumX/OGpocm7A4BdrdODXfHzW5ap/WTN46/nlq7pMZH/8sa8GLzhpOv3OokUogLZFh1zZaFD4M0Hiseyw== user@H4530

Если хотите можете сверить данные с нужной строки и данными с файла публичного ключа. Данные будут идентичны.

Запоминаем пароль с помощью ssh-agent

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

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

Проверим состояние ssh-agent:

ps -C ssh-agent
= вывод команды =
 PID TTY TIME CMD
 4564 ? 00:00:00 ssh-agent

Теперь нам надо добавить нужный ключ командой:

ssh-add /home/user/.ssh/rsa_sevo44
= вывод команды =
Enter passphrase for /home/user/.ssh/rsa_sevo44: вводим пароль
Identity added: /home/user/.ssh/rsa_sevo44 (/home/user/.ssh/rsa_sevo44)

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

Посмотреть добавленные ключи можно командой:

ssh-add -l
= вывод команды =
1024 SHA256:A9d+2cz6M1GK482oOxf/zweqt9B18WPox04m+Deczgc /home/user/.ssh/rsa_sevo44 (RSA)

Для удаления всех ключей применим опцию -D:

ssh-add -D
= вывод команды =
All identities removed.

Такую команду удобно использовать если мы работали на каком то чужом компьютере доступ которому может быть у других людей. Для удаления только своего ключа можно использовать опцию -d путь к ключу.

Авторизация по ключу в SSH

Только после добавления необходимого ключа командой ssh-add пробуйте подключится по ключу!

Подключимся к нужному серверу по нестандартному порту с выводом истории подключения ssh:

ssh -p 4223442 root@10.10.0.2 -v
= вывод части команды с комментариями =
OpenSSH_7.5p1-hpn14v12, OpenSSL 1.0.2k 26 Jan 2017
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to 10.10.0.2 [10.10.0.2] port 4223442.
debug1: Connection established.
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:i8TBEPr+jQo0HT49dpo1zOgCX9xPUOlvFEDCU63tHQA
debug1: Host '[10.10.0.2]:4223442' is known and matches the ECDSA host key.
debug1: Found key in /home/user/.ssh/known_hosts:20
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_SERVICE_ACCEPT received
# В этой строчке мы видим возможные варианты подключения к серверу
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/user/.ssh/rsa_sevo44
debug1: Server accepts key: pkalg ssh-rsa blen 151
debug1: Authentication succeeded (publickey).
Authenticated to10.10.0.2 ([10.10.0.2]:4223442).
debug1: HPN to Non-HPN Connection
debug1: Final hpn_buffer_size = 2097152
debug1: HPN Disabled: 0, HPN Buffer Size: 2097152
debug1: channel 0: new [client-session]
debug1: Enabled Dynamic Window Scaling
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: network

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sun Jul 16 00:28:36 2017 from 10.10.0.3
root@proxmox:~#

Результат

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Хотите сказать денежное спасибо? Подарите денежку!