Как настроить аутентификацию по ключу SSH в Linux

Secure Shell (SSH) является наиболее широко используемым средством входа на удаленный сервер (или компьютер) Linux. Используя этот инструмент, вы получаете доступ к командной строке на удаленном компьютере через безопасный туннель. Из коробки вам будет предложено ввести пароль удаленного пользователя. Хотя это все еще более безопасно, чем использование более старых методов (таких как telnet), его можно сделать еще более безопасным с помощью SSH Key Authentication.

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

Это основа для аутентификации по ключу SSH. В реальной жизни это работает так, что мы создаете пару ключей (которая содержит закрытый и открытый ключи) и копируем открытый ключ на сервер, на который хотим войти. Если мы попытаетемся войти с аутентификацией по ключу, а у сервера нет открытого ключа, соответствующего нашему личному ключу, он не разрешит нам доступ.

Первое, что нужно сделать, это создать пару ключей SSH. Для этого выполним следующие действия:

1. Открываем окно терминала на рабочем столе и вводим команду:

$ ssh-keygen

Вводим имя и местоположение ключа (чтобы оставить по умолчанию, нажимаем Enter на клавиатуре).

2. Вводим и подтверждаем ключевую фразу для нашего SSH-ключа (она должна быть надежной и уникальной), либо просто нажимаем Enter (чтобы оставить без ключевой фразы)

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

  • id_rsa - закрытый ключ
  • id_rsa.pub - открытый ключ.

Теперь мы должны скопировать файл открытого ключа на удаленный компьютер, на который мы будем входить по ключу. Это можно сделать с помощью команды:

$ ssh-copy-id USER@REMOTE_IP

Где USER - это имя пользователя на удаленном компьютере, а REMOTE_IP - это IP-адрес удаленного компьютера. Если при копировании выдает ошибку, добавляем опцию с открытым ключом -i id_rsa.pub

Нам будет предложено ввести пароль пользователя на удаленном компьютере. После успешного ввода пароля ключ будет скопирован, и можно будет проверить соединение.

Проверим соединение, введя команду:

$ ssh USER@REMOTE_IP

Где USER - это имя пользователя на удаленном компьютере, а REMOTE_IP - это IP-адрес удаленного компьютера. Вместо запроса пароля пользователя будет предложено ввести ключевую фразу пары ключей SSH. После того, как мы введем правильную ключевую фразу, нам будет разрешен доступ к удаленному компьютеру.

Вот и все, авторизация по SSH-ключу запущена и работает.

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

Чтобы отключить аутентификацию по паролю, войдите на удаленный компьютер и введите команду:

# nano /etc/ssh/sshd_config

В этом файле закомментируйте строку PasswordAuthentication yes и добавьте строку PasswordAuthentication no

Сохраните и закройте файл. Перезапустите сервис sshd:

# systemctl restart sshd

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

Вот и все. Мы успешно сделали вход на удаленную систему Linux более безопасным с помощью SSH.