Как настроить ключи SSH в Ubuntu 22.04
SSH, или безопасная оболочка, представляет собой зашифрованный протокол, используемый для администрирования и взаимодействия с серверами. При работе с сервером Ubuntu, скорее всего, вы будете проводить большую часть своего времени в сеансе терминала, подключенного к вашему серверу через SSH.
В этом руководстве мы сосредоточимся на настройке SSH-ключей для установки Ubuntu 22.04. SSH-ключи обеспечивают безопасный способ входа на ваш сервер и рекомендуются всем пользователям.
Шаг 1 — Создание пары ключей
Первым шагом является создание пары ключей на клиентском компьютере (обычно на вашем компьютере):
$ ssh-keygen
По умолчанию последние версии ssh-keygen
будут создавать 3072-битную пару ключей RSA, которая достаточно безопасна для большинства случаев использования (вы можете дополнительно передать -b 4096
флаг для создания большего 4096-битного ключа).
После ввода команды вы должны увидеть следующий вывод:
Generating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):
Нажмите enter, чтобы сохранить пару ключей в .ssh/
подкаталоге в вашем домашнем каталоге, или укажите альтернативный путь.
Если вы ранее сгенерировали пару ключей SSH, вы можете увидеть следующее приглашение:
/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?
Если вы решите перезаписать ключ на диске, вы больше не сможете проходить аутентификацию с использованием предыдущего ключа. Будьте очень осторожны при выборе “да”, поскольку это разрушительный процесс, который нельзя обратить вспять.
Затем вы должны увидеть следующее приглашение:
Enter passphrase (empty for no passphrase):
Здесь вы можете дополнительно ввести защищенную парольную фразу, которая настоятельно рекомендуется. Парольная фраза добавляет дополнительный уровень безопасности для предотвращения входа неавторизованных пользователей.
Затем вы должны увидеть вывод, аналогичный следующему:
Your identification has been saved in /your_home/.ssh/id_rsa
Your public key has been saved in /your_home/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:/hk7MJ5n5aiqdfTVUZr+2Qt+qCiS7BIm5Iv0dxrc3ks user@host
The key's randomart image is:
+---[RSA 3072]----+
| .|
| + |
| + |
| . o . |
|o S . o |
| + o. .oo. .. .o|
|o = oooooEo+ ...o|
|.. o *o+=.*+o....|
| =+=ooB=o.... |
+----[SHA256]-----+
Теперь у вас есть открытый и закрытый ключи, которые вы можете использовать для аутентификации. Следующим шагом будет размещение открытого ключа на вашем сервере, чтобы вы могли использовать аутентификацию на основе SSH-ключа для входа в систему.
Шаг 2 – Копирование открытого ключа на ваш сервер Ubuntu
Самый быстрый способ скопировать ваш открытый ключ на хост Ubuntu – это использовать утилиту под названием ssh-copy-id
.
ssh-copy-id
включен по умолчанию во многие операционные системы. Чтобы этот метод работал, у вас уже должен быть SSH-доступ к вашему серверу на основе пароля.
Чтобы использовать утилиту, вы указываете удаленный хост, к которому хотите подключиться, и учетную запись пользователя, к которой у вас есть SSH-доступ на основе пароля. Это учетная запись, в которую будет скопирован ваш открытый SSH-ключ.
Синтаксис:
$ ssh-copy-id username@remote_host
Вы можете увидеть следующее сообщение:
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
Это означает, что ваш локальный компьютер не распознает удаленный хост. Это произойдет при первом подключении к новому хосту. Введите “yes” и нажмите ENTER
, чтобы продолжить.
Далее утилита просканирует вашу локальную учетную запись на наличие id_rsa.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
username@203.0.113.1's password:
Введите пароль (ваш ввод не будет отображаться в целях безопасности) и нажмите ENTER
. Утилита подключится к учетной записи на удаленном хосте, используя предоставленный вами пароль. Затем он скопирует содержимое вашего ~/.ssh/id_rsa.pub
ключа в файл в домашнем ~/.ssh
каталоге удаленной учетной записи под названием authorized_keys
.
Вы должны увидеть следующий вывод:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'username@203.0.113.1'"
and check to make sure that only the key(s) you wanted were added.
На данный момент ваш id_rsa.pub
ключ был загружен в удаленную учетную запись. Вы можете перейти к следующему шагу.
Шаг 3 – Аутентификация на вашем сервере Ubuntu с использованием SSH-ключей
Теперь вы сможете войти на удаленный хост без предоставления пароля удаленной учетной записи.
Основной процесс тот же:
$ ssh username@remote_host
Если вы не указали кодовую фразу для своего закрытого ключа, вы немедленно войдете в систему. Если вы указали кодовую фразу для закрытого ключа при создании ключа, вам будет предложено ввести ее сейчас (обратите внимание, что ваши нажатия клавиш не будут отображаться в сеансе терминала для обеспечения безопасности). После аутентификации для вас должен открыться новый сеанс командной строки с настроенной учетной записью на сервере Ubuntu.
Если аутентификация на основе ключей прошла успешно, продолжайте изучать, как дополнительно защитить вашу систему, отключив аутентификацию по паролю.
Шаг 4 – Отключение аутентификации по паролю на вашем сервере
Если вы смогли войти в свою учетную запись с помощью SSH без пароля, вы успешно настроили аутентификацию на основе SSH-ключа для своей учетной записи. Однако ваш механизм аутентификации на основе пароля все еще активен, что означает, что ваш сервер по-прежнему подвергается атакам методом перебора.
Перед выполнением шагов в этом разделе убедитесь, что у вас либо настроена аутентификация на основе SSH-ключа для учетной записи root на этом сервере, либо, что предпочтительнее, что у вас настроена аутентификация на основе SSH-ключа для учетной записи, не являющейся root, на этом сервере с sudo
привилегиями. Этот шаг заблокирует логины, основанные на паролях, поэтому крайне важно убедиться, что вы по-прежнему сможете получить административный доступ.
После того, как вы подтвердите, что ваша удаленная учетная запись имеет права администратора, войдите на свой удаленный сервер с помощью SSH-ключей, либо как root, либо с учетной записью с sudo
привилегиями. Затем откройте файл конфигурации демона SSH:
$ sudo nano /etc/ssh/sshd_config
Внутри файла найдите директиву с именем PasswordAuthentication
. Эта строка может быть закомментирована #
буквой “а” в начале строки. Раскомментируйте строку, удалив #
, и установите значение no
. Это отключит вашу возможность входа в систему через SSH с использованием паролей учетной записи:
. . .
PasswordAuthentication no
. . .
Сохраните и закройте файл, когда вы закончите, нажав CTRL+X
, затем Y
для подтверждения сохранения файла и, наконец ENTER
, для выхода из nano. Чтобы фактически активировать эти изменения, нам необходимо перезапустить sshd
службу:
$ sudo systemctl restart ssh
В качестве меры предосторожности откройте новое окно терминала и проверьте правильность работы службы SSH перед закрытием текущего сеанса:
$ ssh username@remote_host
Как только вы убедитесь, что ваша служба SSH функционирует должным образом, вы можете безопасно закрыть все текущие сеансы сервера.
Демон SSH на вашем сервере Ubuntu теперь отвечает только на аутентификацию на основе SSH-ключа. Логины, основанные на паролях, были отключены.