Настройка ключа аутентификации для удаленного входа по SSH в Ubuntu 24.04
В этом простом руководстве показано, как отключить аутентификацию по паролю и вместо этого использовать ключ SSH для удаленного входа на удаленный сервер или рабочий стол Ubuntu.
SSH (Secure Shell) — популярный и безопасный способ входа в систему на удаленных серверах и/или передачи данных между локальными и удаленными компьютерами. Когда вы пытаетесь подключиться к удаленному серверу по SSH, он обычно запрашивает пароль пользователя для аутентификации.
Однако пароли не самые безопасные. Как правило, они либо несложны, либо достаточно длинны, чтобы защитить от атак, либо их сложно запомнить и вводить снова и снова при каждом подключении.
Чтобы обеспечить большую безопасность и сэкономить ваше время, хорошим выбором будет аутентификация с использованием безопасного ключа. И вот как это настроить шаг за шагом.
Шаг 1. Создайте пару безопасных ключей
Пара ключей SSH обычно включает в себя частный
и открытый
ключи. Локальный клиент хранит закрытый ключ, а связанный с ним открытый ключ загружается на удаленный сервер.
Когда запускается SSH-соединение, сервер проверяет, есть ли у клиента закрытый ключ. Если да, то разрешает подключение. Если нет, вернитесь к другому методу аутентификации, если таковой имеется (например, запрос пароля).
Чтобы сгенерировать пару ключей, откройте терминал (Ctrl+Alt+T) и выполните приведенную ниже команду на своем локальном компьютере:
ssh-keygen
Запустите sudo apt install openssh-client
, если у вас не установлен пакет SSH-клиента.
По умолчанию команда создаст пару ключей ed25519. Затем он попросит либо нажать Enter, чтобы сохранить файл ключей по умолчанию, либо вручную ввести /home/USER_NAME/.ssh/key_name_here.
Затем вам нужно ввести парольную фразу (просто введите ее, без обратной связи со звездочкой) и подтвердите шифрование ключа, поэтому, даже если вы потеряли ключ, другие не смогут использовать его без парольной фразы.
Шаг 2. Скопируйте открытый ключ на удаленный сервер
После шага 1 файлы закрытого и открытого ключей должны находиться в локальной папке .ssh
.
Запустите команду, чтобы перейти к этой папке, и перечислите ее содержимое. Затем вы увидите два ключевых файла.
cd ~/.ssh && ls
ПРИМЕЧАНИЕ. Прежде чем запускать приведенную ниже команду, убедитесь, что на удаленном сервере установлен openssh-server
и включен ssh.service (ssh.socket для 24.04). Кроме того, необходимо разрешить аутентификацию по паролю.
Чтобы загрузить общедоступную информацию на SSH-сервер, выполните аналогичную команду, указанную ниже, на локальном компьютере:
ssh-copy-id -i ~/.ssh/my_ssh_key.pub -p 22366 ji@localhost
В команде необходимо соответственно заменить следующие параметры:
-i ~/.ssh/my_ssh_key.pub
– идентифицирует файл ключа. Замените имя ключаmy_ssh_key
на свое, как описано в шаге 1.-p 22366
— сообщает порт прослушивания удаленного SSH-сервера. По умолчанию — 22.ji@localhost
– «ji» — это имя пользователя на удаленном сервере, на который я пытаюсь войти, «localhost» — это имя удаленного хоста. В данном случае я пытаюсь подключиться к виртуальной машине по SSH. Вам необходимо заменить его на имя_пользователя@ip_адрес_сервера.
После успешного запуска команды ssh-copy-id
на удаленном SSH-сервере теперь должен быть «открытый ключ», записанный в виде новой строки в файле ~/.ssh/authorized_keys
по умолчанию. файл.
Затем вы можете попробовать команду ssh -p xxx user@ip-address
на локальном компьютере. Должно появиться диалоговое окно с запросом пароля (вы установили его на шаге 1), чтобы разблокировать закрытый ключ.
Если вы не хотите вводить пароль снова и снова, просто отметьте «Автоматически разблокировать этот ключ при каждом входе в систему» во всплывающем диалоговом окне.
В случае, если это НЕ работает, убедитесь, что на вашем SSH-сервере для параметра «pubkeyauthentication
» установлено значение «да», и он включает «.ssh/authorized_keys» в качестве «authorizedkeysfile
». обычно это настройки демона SSH по умолчанию.
Для идентификации используйте команду:
sudo sshd -T |grep -e "authorizedkeysfile" -e "pubkeyauthentication"
Шаг 3. Отключите вход по SSH с паролем
Если все пойдет хорошо, вы можете отключить аутентификацию по паролю, чтобы защитить SSH-сервер, хотя это НЕОБЯЗАТЕЛЬНО.
1. Сначала подключитесь к удаленному SSH-серверу. Затем запустите команду для редактирования файла конфигурации демона sshd:
sudo nano /etc/ssh/sshd_config
Когда файл откроется, выполните:
- Найдите «PasswordAuthentication yes» и установите для него значение PasswordAuthentication no. Удалите «#», если он есть в начале, иначе он не будет работать.
- Если строка KbdInteractiveAuthentication включена (без # в начале), установите для нее значение no. Он используется для входа в систему с одноразовым паролем, который, однако, также позволяет войти в систему со статическим паролем, если вы не отключили его в настройках PAM.
- Если ChallengeResponseAuthentication включен, также установите значение no.
Наконец, нажмите Ctrl+S, чтобы сохранить файл, и Ctrl+X, чтобы выйти.
2. Затем запустите команду, чтобы просмотреть содержимое каталога /etc/ssh/sshd_config.d/
:
ls /etc/ssh/sshd_config.d/
Каталог по умолчанию пуст! Но любой файл .conf
в этом каталоге может переопределить ваши конфигурации SSH, поскольку они сначала загружаются в /etc/ssh/sshd_config
.
3. Чтобы проверить вашу конфигурацию и наличие ошибок, используйте команду:
sudo sshd -T | grep authentication
4. Чтобы применить изменения, выполните одну за другой две команды ниже:
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
Для старой Ubuntu 22.04 и более ранних версий вы можете вместо этого запустить команду ниже, чтобы применить изменения:
sudo systemctl status ssh.service