Настроим авторизацию по ключу RSA для SSH сервера. Помимо удобства в использовании мы сильно обезопасим нашу систему от взлома. Рассмотрим разные варианты использования подключения по ключу. Надежное хранение приватных ключей гарантия подключения.
Содержание:
Введение
Не на долго удалось мне отложить настройку этого варианта подключения к серверу. Необходимость настройки доступа по ключу пришла откуда я даже не думал. Неожиданно обнаружил что резервные копии периодически не проходят на Yandex.Disk. Резервирование сайтов у меня производится скриптом который резервирует вначале файлы сайта а потом базу. Пропуски были как с файлами так и с базами. Решил настроить резервное копирование на сервер с которым идет соединение ssh.
Для того чтобы система сама соединялась по ключу к ssh серверу я создал на сервере пользователя которого запер в своей домашней директории с архивными копиями и при генерации связки ключей не указывал парольной фразы.
Расскажу как настроить подключение к данным web сервера используя протокол sftp по файлу с ключом расширением ppk.
Использование только подключения по сертификату дает максимальную безопасность как подключения так и удобство в администрировании. Вам достаточно добавить открытую часть сертификата на сервер и только этот человек подключится к серверу. Вам не надо передавать пароль который может быть легко скомпрометирован. Закрыть доступ конкретному пользователю очень просто и быстро, так как не надо менять пароль и говорить об этом другим участникам имеющим доступ.
Генерация пары ключей 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 сервера:
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
Если хотите можете сверить данные с нужной строки и данными с файла публичного ключа. Данные будут идентичны.
При желании вы можете добавить открытую часть сертификата руками.
Для этого смотрим публичную часть сертификата:
cat /home/user/.ssh/rsa_sevo44.pub = вывод команды = ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDCHkWoBv8b+j11IJ685m4WrYCdgx/v5bqwC3AahFyySH4yK0CV8ZJA7H6e3bbkPEI1Aw2xB6xRUS7NC4B3dGciDycMJJumX/OGpocm7A4BdrdODXfHzW5ap/WTN46/nlq7pMZH/8sa8GLzhpOv3OokUogLZFh1zZaFD4M0Hiseyw== user@H4530
Добавляем его в необходимый файл пользователю к которому подключаемся:
vim /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:~#
FileZilla авторизация по ключу PPK
В статье SFTP настройка для веб хостинга я рассказывал как настроить подключение к данным web сервера по sftp.
Расскажу как подключатся используя сертификат.
Вначале необходимо из действующего сертификата создать файл с расширение ppk. Так как, программа FileZilla понимает только этот формат.
Для Debiana необходимо добавить требуемые пакеты:
apt install putty-tools openssh-client
Переходим в папку где находится закрытая и открытая часть необходимого ключа и создаём в корневой папке своего профиля файл c ключoм:
cd /home/local/.ssh/ puttygen rsa_sevo44 -o ~/rsa_sevo44.ppk
После добавления сертификата на сервер нам необходимо в программе FileZilla указать необходимый файл с ключом:
Заключение
Мы успешно можем подключатся и работать на нужном сервере без ввода пароля. Создавать сертификат без пароля или с паролям решать только вам, но вопрос в том насколько вы доверяете своему компьютеру. Обычно использую сертификат без парольной фразы так как храню пароли в надежном месте и без моего ведома их никто не увидит.