2 простых шага по настройке аутентификации с открытым ключом SSH в CentOS
В этом руководстве объясняется, как настроить аутентификацию с открытым ключом SSH на рабочем столе CentOS/RHEL. Существует два основных способа аутентификации пользователя при входе на сервер OpenSSH: аутентификация по паролю и аутентификация с использованием открытого ключа. Последний вариант также известен как вход по SSH без пароля, поскольку вам не нужно вводить пароль.
Шаг 1. Создайте пару открытого/закрытого ключей SSH на рабочем столе CentOS/RHEL.
На рабочем столе CentOS/RHEL (не на сервере) введите следующую команду в окне терминала.
ssh-keygen -t rsa -b 4096
Где :
-t
означаеттип
. Приведенная выше команда генерирует пару ключей типа RSA. RSA — тип по умолчанию.-b
означаетбиты
. По умолчанию длина ключа составляет 3072 бита. Мы используем ключ длиной 4096 бит для большей безопасности.
Когда вас спросят, в каком файле сохранить ключ, вы можете просто нажать Enter
, чтобы использовать файл по умолчанию. Затем введите хорошую парольную фразу длиной не менее 20 символов. Парольная фраза используется для шифрования закрытого ключа.
- Закрытый ключ (не передавайте его никому) будет сохранен в файле .ssh/id_rsa в вашем домашнем каталоге.
- Открытый ключ будет сохранен в файле .ssh/id_rsa.pub.
На случайном изображении мы можем увидеть длину ключа (RSA 4096
). Теперь выполните следующую команду.
file ~/.ssh/id_rsa
Вы должны увидеть следующий вывод:
/home/username/.ssh/id_rsa: OpenSSH private key
Если вы видите ошибку «Нет такого файла или каталога», это означает, что пара ключей SSH не создана. Запустите команду ssh-keygen -t rsa -b 4096
, чтобы создать его снова.
Шаг 2. Загрузите открытый ключ SSH на удаленный сервер Linux.
Подсказка: на удаленном сервере может работать любой дистрибутив Linux: Debian, Ubuntu, RHEL, CentOS и т. д., если на нем работает сервер OpenSSH, вы можете использовать следующий метод.
Это можно легко сделать с помощью команды ssh-copy-id
, которая поставляется с пакетом openssh-clients
.
ssh-copy-id remote-user@server-ip
Введите пароль удаленного пользователя.
Открытый ключ будет храниться в файле .ssh/authorized_keys в домашнем каталоге удаленного пользователя. Теперь подключимся по SSH к удаленному серверу.
ssh remote-user@server-ip
На этот раз вам нужно ввести свой RSA ключ парольную фразу, чтобы разблокировать закрытый ключ. Вы можете выбрать автоматическую разблокировку ключа при входе в систему, чтобы вам не приходилось вводить кодовую фразу в будущем.
Как только вы введете правильную ключевую фразу, вы войдете на удаленный сервер Linux. Теперь выйдите с удаленного сервера.
exit
И снова SSH на удаленный сервер:
ssh remote-user@server-ip
На этот раз вы автоматически вошли на удаленный сервер, хотя вы не вводили пароль или ключевую фразу. Также вам не нужно вводить пароль или ключевую фразу при использовании команды scp
для передачи файла. Команда scp
поставляется в пакете openssh-clients
, который по умолчанию устанавливается на рабочий стол CentOS/RHEL.
Принудительная аутентификация с открытым ключом SSH на удаленном сервере
Хотя ключ SSH теперь используется по умолчанию для входа на ваш сервер, вы все равно можете использовать свой пароль для входа на сервер на другом компьютере. Вы не хотите, чтобы хакеры атаковали ваш сервер методом перебора, поэтому рекомендуется отключить аутентификацию по паролю на сервере OpenSSH.
Чтобы отключить аутентификацию по паролю, отредактируйте файл /etc/ssh/sshd_config
на удаленном сервере.
sudo nano /etc/ssh/sshd_config
Найдите эту строку:
#PasswordAuthentication yes
Измените его на:
PasswordAuthentication no
Затем найдите строку ChallengeResponseAuthentication
. Убедитесь, что для него установлено значение no
, как показано ниже. Если для него установлено значение да
, вы все равно можете использовать пароль для входа в систему.
ChallengeResponseAuthentication no
Сохраните файл и перезапустите службу SSH.
sudo systemctl restart sshd
Теперь, если у вас нет соответствующего закрытого ключа в каталоге ~/.ssh
, вы увидите следующую ошибку при попытке подключиться по SSH к удаленному серверу.
Permission denied (publickey).
Это означает, что удаленный сервер разрешает вход по SSH только с использованием ключей ssh и не разрешает аутентификацию по паролю. Обратите внимание, что если вы установите для PasswordAuthentication
значение no
и для ChallengeResponseAuthentication
значение yes
, то вы все еще можно войти, используя пароль. Чтобы отключить вход по паролю, для них обоих должно быть установлено значение no
.
Резервное копирование вашей публичной/личной пары ключей
После отключения аутентификации по паролю SSH очень важно создать резервную копию ключей SSH. Если вы потеряете ключи, вы будете заблокированы на своем сервере. Создайте резервную копию пары открытого/частного ключей в безопасном месте, например на USB-накопителе.
cp ~/.ssh/id_rsa* /path/to/safe/location/
Вы можете скопировать пару ключей на новый компьютер с Linux и подключиться к своему серверу по SSH, используя ключи SSH. После того как вы скопировали пару ключей на новый компьютер, переместите их в каталог .ssh/
нового пользователя.
mv id_rsa* ~/.ssh/
Вам необходимо сменить владельца пары ключей на пользователя на новом компьютере.
sudo chown new-user:new-user ~/.ssh/id_rsa*
Теперь вы можете использовать ключи SSH для входа на удаленный сервер на новом компьютере.
Вы также можете сохранить пару ключей в папке, затем сжать папку с помощью шифрования и отправить ее в облачное хранилище, например NextCloud.
Разрешить аутентификацию по паролю с доверенных IP-адресов
Возможно, вы захотите разрешить аутентификацию по паролю с ваших собственных IP-адресов, поэтому, если ключ SSH потеряется, вы все равно сможете войти на свой сервер через SSH.
Совет. Если у вас нет статического IP-адреса, вы можете настроить собственный VPN-сервер в центре обработки данных.
Откройте файл конфигурации демона SSH на удаленном сервере.
sudo nano /etc/ssh/sshd_config
Добавьте следующие строки внизу файла. Замените 10.0.0.2 на свой IP-адрес.
Match Address 10.0.0.2
PasswordAuthentication yes
Если клиент подключается с адреса 192.168.0.2, то аутентификация по паролю разрешена. Вы можете добавить несколько IP-адресов.
Match Address 10.0.0.2 10.0.0.3
PasswordAuthentication yes
Или используйте нотацию CIDR следующим образом:
Match Address 10.0.0.0/24
PasswordAuthentication yes
Сохраните и закройте файл. Перезапустите сервер OpenSSH.
sudo systemctl restart sshd
Изменение парольной фразы закрытого ключа
Если вам когда-нибудь понадобится изменить парольную фразу закрытого ключа, вы можете сделать это с помощью этой команды:
ssh-keygen -f ~/.ssh/id_rsa -p
Введите старую фразу-пароль, а затем введите новую фразу-пароль.
Подведение итогов
Я надеюсь, что это руководство помогло вам настроить аутентификацию с открытым ключом SSH на рабочем столе CentOS/RHEL. Вы также можете прочитать:
- 3 способа использования SSH в Windows для входа на Linux-сервер
Как всегда, если этот пост оказался для вас полезным, подпишитесь на нашу бесплатную рассылку, чтобы получать больше советов и рекомендаций. Берегите себя 🙂