Курс, который сделает вас востребованным на рынке автоматизатором в тестировании и перевернёт ваше представление о том, что тестирование — это скучно и является только шагом перед работой разработчиком. Рекомендую познакомиться с онлайн-курсом «QA Automation Engineer» в OTUS. Курс не для новичков, для поступления нужно пройти вступительный тест.

Настроим авторизацию по ключу 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 -p 25555 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 путь к ключу.

Права на ключи RSA

В папку пользователя .ssh можно добавить ранее созданные сертификаты. Достаточно выставить необходимые права и сертификат будет активен после перезагрузки системы.

Выставим необходимые права (на примере ключа с именем rsa_sevo44 пользователя local):

chmod 0600 /home/local/.ssh/rsa_sevo44
chmod 0644 /home/local/.ssh/rsa_sevo44.pub

Для проверки выведем полную информацию о файлах
ls -l
= Необходимая часть =
-rw------- 1 local local  986 июл 15 21:24 rsa_sevo44
-rw-r--r-- 1 local local  225 июл 15 21:24 rsa_sevo44.pu

Авторизация по ключу в 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.

Понравилась статья? Поделитесь ей с друзьями!

Онлайн курс "Автоматизация веб-тестирования"

Курс, который сделает вас востребованным на рынке автоматизатором в тестировании и перевернёт ваше представление о том, что тестирование — это скучно и является только шагом перед работой разработчиком. Рекомендую познакомиться с онлайн-курсом «QA Automation Engineer» в OTUS. Курс не для новичков, для поступления нужно пройти вступительный тест.

Проверьте себя на вступительном тесте и смотрите программу детальнее по ссылке.

Похожие по теме записи

Уважаемые коллеги, пожалуйста, оставляйте свои комментарии

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *