Введение
В этой лабораторной работе вы научитесь настраивать и использовать аутентификацию по открытому ключу 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-сессии на сервере, которая успешно прошла аутентификацию с использованием кодовой фразы закрытого ключа вместо пароля учетной записи пользователя, что подтвердило корректную работу системы.



