Каким образом настроить доступ на сервер с помощью SSH ключей и отключить аутентификацию по паролю?
Что такое аутентификация с помощью SSH ключей, как она работает и для чего используют?
Аутентификация с помощью SSH ключей является чрезвычайно безопасным способом входа на сервер. В данном случае используются два криптографических ключа, каждая пара ключей состоит из открытого и закрытого ключа. Открытый ключ можно не опасаясь распространять т.к. он служит для шифрования сообщений, которые можно расшифровать только имея закрытый ключ.
Закрытый ключ необходимо очень надежно хранить! Мы крайне рекомендуем в качестве дополнительной меры предосторожности защитить его парольной фразой.
Публичный ключ вы можете добавить в разделе "Мои Серверы", вкладка "SSH-ключи".
Есть возможность добавить сразу несколько ключей
В дальнейшем, при заказе сервера, вы можете выбрать этот ключ.
Если на своём сервере вы настроили доступ с помощью SSH ключей, то панель автоматически загрузит открытый ключ в файл ~/.ssh/authorized_keys на вашем сервере. Когда пользователь попытается подключиться к серверу с помощью SSH-ключей, то он проверяет клиента на наличие у него закрытого ключа. Таким образом происходит аутентификация.
Как сгенерировать ключи?
В Windows это можно сделать с помощью Putty, скачиваем программу и запускаем файл puttygen.exe. Тип ключа выбираем RSA, а длину 2048 бит, нажимаем Generate, при генерации произвольно водим курсором мыши.
Сохраните сгенерированную пару ключей на компьютере, для этого используйте кнопки Save public key и Save private key. Не забудьте защитить закрытый ключ секретной фразой/паролем (необходимо ввести в поле Key passphrase/Confirm passphrase). Скопируйте сгененированный публичный ключ и вставьте его в соответствующее поле нашей панели управления. Эту же программу используйте в дальнейшем для подключения со сгенерированным ключом.
В Linux или MacOS откройте терминал и выполните следующую команду
ssh-keygen -t rsa
Вы увидите следующий ответ компьютера
Enter file in which to save the key (/root/.ssh/id_rsa):
Вам необходимо нажать на клавишу Enter и ввести фразу/пароль для дополнительной защиты закрытого ключа, система попросит ввести его 2 раза
Enter passphrase (empty for no passphrase):
После этого ключ будет создан, а на консоль будет сообщение приблизительно такого содержания
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
bf:9b:79:ca:9f:96:bb:4c:b9:67:e9:e6:4d:1f:30:e1 root@xxx.vdsina.ru
The key's randomart image is:
+--[ RSA 2048]----+
| |
| |
| . |
| . . |
| S E |
| . .o |
| . o. o.|
| . *+o=oo|
| B*BOo o|
+-----------------+
Чтобы получить открытый ключ вводим в терминале команду
cat ~/.ssh/id_rsa.pub
Полученный ключ вводим в соответствующее поле нашей панели управления. В дальнейшем вы сможете подключаться со своего ПК к серверу с помощью команды
ssh root@[IP-адрес сервера]
Дополнительная защита сервера при использовании SSH ключей: отключение парольной аутентификации
ВНИМАНИЕ! Прежде чем выполнять этот пункт обязательно проверьте работу SSH ключей и входа на сервер по ним.
Если у вас вышло подключиться к серверу с помощью SSH-ключей, то в качестве дополнительной меры безопасности можно отключить аутентификацию через пароль. Для этого открываем конфигурационный файл демона SSH /etc/ssh/sshd_config и раскомментируем директиву PasswordAuthentication, установим ей значение no.
PasswordAuthentication no
Если используется система Ubuntu 22.04 и выше, система использует директивы для конфигурации SSH в отдельной директории /etc/ssh/sshd_config.d/. Файл 50-cloud-init.conf может перезаписывать настройки основного файла /etc/ssh/sshd_config. Если в этом файле содержится строка PasswordAuthentication yes, то доступ по паролю остаётся активным, даже если в основном конфигурационном файле это запрещено.
Чтобы полностью отключить доступ по паролю, можно удалить или изменить файл /etc/ssh/sshd_config.d/50-cloud-init.conf:
Удалите файл:
sudo rm /etc/ssh/sshd_config.d/50-cloud-init.conf
Сохраняем изменения и перезапускаем сервис
# Ubuntu/Debian
sudo systemctl restart ssh
# CentOS/Fedora
sudo service sshd restart