Настройка аутентификации по SSH-ключам в Linux

CompTIABeginner
Практиковаться сейчас

Введение

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

Процесс состоит из трех основных этапов. Сначала вы воспользуетесь командой ssh-keygen для генерации новой пары RSA-ключей для демонстрационного пользователя, добавив дополнительный уровень защиты с помощью кодовой фразы. Затем вы безопасно скопируете открытый ключ в файл авторизованных ключей удаленного сервера, используя утилиту ssh-copy-id. Наконец, вы протестируете конфигурацию, выполнив вход на сервер через SSH: теперь для проверки подлинности будет использоваться ваша пара ключей вместо обычного пароля.

Создание демонстрационного пользователя и генерация пары RSA-ключей

На этом этапе вы сначала создадите специальную учетную запись пользователя для демонстрации аутентификации по SSH-ключам, а затем сгенерируете пару криптографических ключей RSA. Такой подход гарантирует чистоту среды для демонстрации без изменения настроек существующих пользователей.

Создание демонстрационного пользователя

Для начала создадим нового пользователя с именем sshuser, который будет использоваться в нашей демонстрации SSH:

sudo adduser sshuser

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

Adding user `sshuser' ...
Adding new group `sshuser' (1001) ...
Adding new user `sshuser' (1001) with group `sshuser' ...
Creating home directory `/home/sshuser' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for sshuser
Enter the new value, or press ENTER for the default
 Full Name []:
 Room Number []:
 Work Phone []:
 Home Phone []:
 Other []:
Is the information correct? [Y/n] Y

Генерация пары RSA-ключей

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

sudo su - sshuser

Теперь вы работаете от имени sshuser. Сгенерируйте пару RSA-ключей с помощью команды ssh-keygen. Флаг -t указывает тип создаваемого ключа, в данном случае — rsa.

ssh-keygen -t rsa

После запуска команды вам будет предложено выбрать место для сохранения ключей. По умолчанию это ~/.ssh/id_rsa — скрытый каталог .ssh в домашней папке пользователя. Нажмите Enter, чтобы принять этот путь.

Generating public/private rsa key pair.
Enter file in which to save the key (/home/sshuser/.ssh/id_rsa):

Затем вам предложат ввести кодовую фразу (passphrase). Она добавляет дополнительный уровень защиты вашему закрытому ключу. Для этой лабораторной работы используйте sshkey-password. Вам нужно будет ввести её дважды.

Примечание: При вводе кодовой фразы символы не будут отображаться на экране. Это стандартная мера безопасности.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/sshuser/.ssh/id_rsa
Your public key has been saved in /home/sshuser/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:<FINGERPRINT_STRING> sshuser@ubuntu
The key's randomart image is:
+---[RSA 3072]----+
|      .. . .o..  |
|     .  . . o..  |
|      .  . = . . |
|       .  B o .  |
|        S= * .   |
|        o*B o .  |
|       .oO=B . . |
|      .o+*+oE. . |
|      .o*o=o.o.  |
+----[SHA256]-----+

Теперь, когда ключи созданы, вы можете убедиться в правильности появления файлов. Используйте команду ls -l, чтобы просмотреть содержимое каталога ~/.ssh:

ls -l ~/.ssh

Вы должны увидеть вывод, похожий на следующий, со списком ваших новых файлов ключей:

total 8
-rw------- 1 sshuser sshuser 2610 Jun 30 10:30 id_rsa
-rw-r--r-- 1 sshuser sshuser  575 Jun 30 10:30 id_rsa.pub

Обратите внимание на права доступа к файлам. Закрытый ключ id_rsa имеет права на чтение и запись только для владельца, в то время как открытый ключ id_rsa.pub доступен для чтения остальным. Крайне важно защищать свой закрытый ключ и никогда никому его не передавать.

Копирование открытого ключа на сервер с помощью ssh-copy-id

На этом этапе вы скопируете открытый ключ, созданный ранее, на SSH-сервер. Это действие авторизует ключ, позволяя вам входить в систему с помощью соответствующего закрытого ключа вместо пароля. Утилита ssh-copy-id — это скрипт, который упрощает процесс, устанавливая ваш ключ в нужное место на сервере.

В рамках этой лабораторной работы мы имитируем взаимодействие клиента и сервера на одной машине. Учетная запись sshuser будет выступать и в роли клиента, и в роли целевой учетной записи для SSH-соединения.

Убедитесь, что вы все еще работаете под учетной записью sshuser. Если вы вернулись к пользователю labex, переключитесь обратно:

sudo su - sshuser

Теперь вы готовы скопировать открытый ключ. Команда ssh-copy-id принимает в качестве аргумента имя удаленного пользователя и хост. Мы будем использовать sshuser@localhost, чтобы указать пользователя sshuser на локальной машине (выступающей в роли сервера).

Выполните команду:

ssh-copy-id sshuser@localhost

Поскольку это первое подключение к localhost через SSH, вам будет предложено подтвердить подлинность хоста. Введите yes, чтобы продолжить:

The authenticity of host 'localhost (::1)' can't be established.
ED25519 key fingerprint is SHA256:<FINGERPRINT_STRING>.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

Затем утилита выполнит поиск вашего ключа id_rsa.pub и запросит пароль для учетной записи sshuser. Введите пароль password123, который вы установили при создании пользователя.

/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
sshuser@localhost's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'sshuser@localhost'"
and check to make sure that only the key(s) you wanted were added.

Вывод подтверждает, что один ключ был успешно добавлен. Команда ssh-copy-id автоматически создает каталог ~/.ssh на сервере, если он не существует, и добавляет ваш открытый ключ в файл ~/.ssh/authorized_keys.

Чтобы убедиться в этом, вы можете просмотреть содержимое файла authorized_keys. Он должен содержать точно такой же ключ, как и ваш файл id_rsa.pub.

cat ~/.ssh/authorized_keys

Выводом будет длинная строка символов — это и есть ваш открытый ключ.

ssh-rsa AAAA...[long key string]...== sshuser@ubuntu

Тестирование входа по SSH с аутентификацией по открытому ключу

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

Убедитесь, что вы все еще работаете под учетной записью sshuser:

whoami

В выводе должно быть sshuser. Если нет, переключитесь на него:

sudo su - sshuser

Теперь инициируем SSH-соединение с localhost. Поскольку вы уже подключались один раз во время копирования ключа, ключ хоста уже должен быть принят.

Выполните следующую команду для подключения:

ssh sshuser@localhost

Вам будет предложено ввести кодовую фразу для вашего закрытого ключа. Это та самая фраза, которую вы создали на этапе 1 (sshkey-password).

Enter passphrase for key '/home/sshuser/.ssh/id_rsa':

Введите кодовую фразу sshkey-password и нажмите Enter. Если вы ввели её правильно, вы войдете на сервер и увидите приветственное сообщение.

Welcome to Ubuntu 22.04.x LTS (GNU/Linux x.x.x-xx-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

Last login: Mon Jun 30 10:45:23 2024 from ::1
sshuser@ubuntu:~$

Поздравляем! Вы успешно вошли в систему, используя аутентификацию по открытому ключу. Теперь вы находитесь в новой SSH-сессии. Обратите внимание, что у вас не запрашивали пароль учетной записи (password123), а только кодовую фразу ключа.

Чтобы убедиться, что вы находитесь в новой SSH-сессии, можно проверить переменные окружения:

echo $SSH_CONNECTION

Это должно вывести детали соединения, подтверждая, что вы работаете через SSH.

Чтобы закрыть SSH-сессию и вернуться в исходный терминал, просто введите exit и нажмите Enter.

exit

Вы увидите сообщение, подтверждающее закрытие соединения.

logout
Connection to localhost closed.

Наконец, вы можете выйти из учетной записи sshuser, чтобы вернуться к пользователю labex:

exit

Вы успешно настроили и протестировали аутентификацию по открытому ключу SSH, используя выделенного демонстрационного пользователя.

Резюме

В ходе этой лабораторной работы вы научились настраивать и использовать аутентификацию по открытому ключу SSH для установления безопасного беспарольного соединения с удаленным сервером Linux. Вы начали с создания специального демонстрационного пользователя (sshuser), чтобы обеспечить чистоту среды для настройки. Затем вы сгенерировали новую пару RSA-ключей с помощью команды ssh-keygen. В результате этого процесса был создан закрытый ключ, который остается в безопасности и защищен кодовой фразой для дополнительного уровня защиты, и соответствующий ему открытый ключ.

Впоследствии вы использовали утилиту ssh-copy-id для безопасной передачи открытого ключа в файл авторизованных ключей сервера. Эта команда автоматически добавила ключ в файл ~/.ssh/authorized_keys, разрешив доступ по данной паре ключей. Заключительный этап включал проверку соединения путем запуска SSH-сессии на сервере, которая успешно прошла аутентификацию с использованием кодовой фразы закрытого ключа вместо пароля учетной записи пользователя, что подтвердило корректную работу системы.