Безопасное SSH в Red Hat Enterprise Linux

Red Hat Enterprise LinuxBeginner
Практиковаться сейчас

Введение

В этом лабораторном практикуме вы получите практический опыт настройки и защиты SSH-соединений — фундаментального навыка для управления удалёнными Linux-системами. Вы начнете с изучения доступа к удалённым системам через SSH, понимания архитектуры клиент-сервер и основных команд подключения. Это включает проверку установки SSH-клиента, подключение к удалённому хосту, обработку запросов об аутентификации хоста и вход/выход из удалённых систем.

Основываясь на этом фундаменте, вы углубитесь в более сложные темы, такие как генерация и использование пар SSH-ключей для аутентификации без пароля, эффективное управление этими ключами с помощью ssh-agent и устранение распространённых проблем с SSH-соединениями. Наконец, вы научитесь настраивать конфигурацию SSH-клиента для повышения эффективности и улучшите безопасность вашего сервера OpenSSH, отключив вход root и аутентификацию по паролю, обеспечивая надёжный и безопасный удалённый доступ.

Доступ к удалённым системам с помощью SSH

В этом шаге вы узнаете, как получить доступ к удалённым системам с помощью SSH (Secure Shell). SSH — это криптографический сетевой протокол для безопасного выполнения сетевых сервисов по незащищённой сети. Он обеспечивает безопасный канал по незащищённой сети, используя архитектуру клиент-сервер, соединяя SSH-клиент с SSH-сервером.

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

Сначала вы подключитесь к локальной системе с помощью SSH. Это демонстрирует архитектуру SSH клиент-сервер даже при подключении к одному и тому же компьютеру. Вы будете использовать команду ssh для подключения к localhost.

Базовый синтаксис для ssh следующий: ssh [имя_пользователя]@[имя_хоста_или_IP]

Если вы не укажете имя пользователя, SSH попытается войти с использованием вашего текущего локального имени пользователя. В этом случае ваше локальное имя пользователя — labex.

Давайте попробуем подключиться к localhost с использованием вашего текущего имени пользователя:

ssh localhost

При первом подключении SSH попросит вас подтвердить подлинность хоста. Это мера безопасности для предотвращения атак «человек посередине». Введите yes и нажмите Enter.

Подлинность хоста 'localhost (127.0.0.1)' не может быть установлена.
Отпечаток ключа ED25519 — SHA256:h5k1mmPFylpxUCsKx+Mf8rN4wOrk9TmyRfzTvGWRm7A.
Этот ключ не известен под другими именами
Вы уверены, что хотите продолжить подключение (да/нет/[отпечаток])? yes
Предупреждение: 'localhost' (ED25519) постоянно добавлен в список известных хостов.
Пароль пользователя labex@localhost:

Вам будет запрошен пароль пользователя labex. Введите labex и нажмите Enter.

Пароль пользователя labex@localhost:
Последний вход: Пн Июн  9 01:34:39 2025 с 47.251.66.143
[labex@host ~]$

Теперь вы вошли в систему через SSH на localhost. Обратите внимание, что ваша командная строка может отображать [labex@localhost ~]$, что указывает на подключение через SSH.

Для выхода из сеанса SSH используйте команду exit:

exit
выход
Соединение с localhost закрыто.
[labex@host ~]$

Теперь давайте попробуем подключиться к localhost как пользователю root. Обратите внимание, что в этой среде вход root может быть отключён по умолчанию по соображениям безопасности.

ssh root@localhost

Вам будет запрошен пароль root. Однако вы можете столкнуться с сообщением «Разрешение отказано», если вход root отключён:

Пароль пользователя root@localhost:
Разрешение отказано, попробуйте снова.
Пароль пользователя root@localhost:
Разрешение отказано, попробуйте снова.
Пароль пользователя root@localhost:

Если вход root отключён, это ожидаемое поведение и демонстрация лучшей практики безопасности. Вы можете нажать Ctrl+C, чтобы отменить попытку подключения.

SSH также можно использовать для выполнения одной команды на удалённой системе без открытия интерактивной оболочки. Это полезно для быстрых проверок или автоматизации.

Давайте выполним команду hostname на localhost как пользователь labex:

ssh labex@localhost hostname

Вам будет запрошен пароль пользователя labex. Введите labex и нажмите Enter.

Пароль пользователя labex@localhost:
6846375f1c0e35fea6cb03e6
[labex@host ~]$

Команда hostname была выполнена через SSH, и её вывод был отображён на вашем локальном терминале. Вы не были переведены в интерактивную оболочку.

Наконец, давайте рассмотрим, как SSH управляет известными хостами. Когда вы подключаетесь к новому SSH-серверу, его отпечаток открытого ключа добавляется в файл ~/.ssh/known_hosts. Этот файл помогает вашему SSH-клиенту проверить подлинность сервера при будущих подключениях.

Вы можете просмотреть содержимое файла ~/.ssh/known_hosts:

cat ~/.ssh/known_hosts
localhost ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHvl7dcZkvMNOr3cjKjlR2/JgFbGpURThT/bHnLZN6gG
localhost ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCynhy3601o9ZSGZoY0KB/QSonk5ykod2Tb7sCAqVn4ZgTCwd96BhPjJLPNQ6ldNASo1e7EzfT4BUjG5T0ZDRhgaI65qmDwITWipTWUfmYT5XoScyf6NDhcRxYiJwztFEkOvLcPhelS6UXj5Z7HdmYH4Nc5wiF00Wah3Jc0/2CfQsFZCXTn/7Kp8KKbBbPqPzr2R3WIULEacOxx9HKVv+2TvYg/OHZz40hTsr1c68DD7h5PMBNe21YB3HLRRk2LQEC7v7BFD+DCek9GNR66JBjbLDljtwWCaPCY0UntBjjvJ3W2LhX5RDZQHV/iaUSj2tEXnvPt9KSqGfBS91D12dBXyOmWVnTpvvI17BdDkEeefas2Uz4d7Bv/PDxZR6IKkaIGQ/ZnRhSEhBNvfqlBGqkOhRr6jQJK+rQMnsZCT6OEgW7osWzkw5Bs1wY/RNToeQqrRMclqffO9plFI688N2iT86+nxrvBVZg4yMMm2J1lleaBvinXCB8jE6lrtwoAdgk=
localhost ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKYWY8Ty6TrbQS/0fUljBWuUpkyPCS/5P6ZwxhSYsqjRBIprMANI/JQotZqHYq2w3b2X/n8O+J3/WuIB6XMl1f4=

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

Генерация и использование пар SSH-ключей для аутентификации без пароля

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

Сначала вам нужно сгенерировать пару SSH-ключей. Для этого вы будете использовать команду ssh-keygen. По умолчанию ssh-keygen создаёт пару ключей RSA и сохраняет закрытый ключ в ~/.ssh/id_rsa, а открытый — в ~/.ssh/id_rsa.pub.

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

ssh-keygen

Вам будут предложены несколько параметров:

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

Нажмите Enter, чтобы принять путь по умолчанию (/home/labex/.ssh/id_rsa).

Enter passphrase (empty for no passphrase):

Для этой лабораторной работы нажмите Enter дважды, чтобы оставить фразу пароля пустой. Хотя использование фразы пароля рекомендуется в реальных сценариях для добавления дополнительного уровня безопасности, мы пропустим это здесь для простоты и для демонстрации аутентификации без пароля напрямую.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/labex/.ssh/id_rsa
Your public key has been saved in /home/labex/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:QoV7pNBFu1kafGP3VJhpZuIdr1zc+qamJ1C2YAadgNY labex@6846375f1c0e35fea6cb03e6
The key's randomart image is:
+---[RSA 3072]----+
|     . *=o .   +.|
|    . =oE.o . O. |
|     o.++.=..*.+.|
|     .o .O+o+o. =|
|      ..So + o.+ |
|       .  . . +  |
|           .   . |
|            . o o|
|            .=.o |
+----[SHA256]-----+

Теперь проверьте, что файлы ключей были созданы в каталоге ~/.ssh/:

ls -l ~/.ssh/
total 16
-rw------- 1 labex labex 2622 Июн  9 01:37 id_rsa
-rw-r--r-- 1 labex labex  584 Июн  9 01:37 id_rsa.pub
-rw------- 1 labex labex  825 Июн  9 01:35 known_hosts
-rw-r--r-- 1 labex labex   91 Июн  9 01:35 known_hosts.old

Вы должны увидеть id_rsa (ваш закрытый ключ) и id_rsa.pub (ваш открытый ключ). Обратите внимание на разрешения: id_rsa имеет rw------- (чтение/запись только для владельца), что имеет решающее значение для безопасности. Вы также можете увидеть known_hosts.old, который является резервной копией предыдущего файла known_hosts.

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

Выполните команду ssh-copy-id, указав пользователя и имя хоста:

ssh-copy-id labex@localhost

Вам будет запрошен пароль пользователя labex. Введите labex и нажмите Enter.

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/labex/.ssh/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
labex@localhost's password:

Number of key(s) added: 1

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

Вывод команды подтверждает, что один ключ был добавлен. Теперь попробуйте войти в localhost как пользователь labex без ввода пароля:

ssh labex@localhost

Если всё настроено правильно, вы войдёте в систему через SSH без запроса пароля.

Последний вход: Пн Июн  9 01:37:39 2025 с 47.251.66.143
[labex@host ~]$

Вы успешно настроили аутентификацию SSH без пароля с помощью пар ключей!

Для выхода из удалённой сессии введите exit:

exit
exit
Соединение с localhost закрыто.
[labex@host ~]$

Управление SSH-ключами с помощью ssh-agent

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

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

Сначала сгенерируйте новую пару SSH-ключей с фразой пароля. Мы назовём этот ключ id_rsa_passphrase, чтобы отличить его от стандартного ключа id_rsa.

ssh-keygen -f ~/.ssh/id_rsa_passphrase

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

Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): mypassphrase
Enter same passphrase again: mypassphrase
Your identification has been saved in /home/labex/.ssh/id_rsa_passphrase
Your public key has been saved in /home/labex/.ssh/id_rsa_passphrase.pub
The key fingerprint is:
SHA256:BuSxVlJb1lsiUFi2I5DAvyL01fJ5d480LT86dgtcHEg labex@6846375f1c0e35fea6cb03e6
The key's randomart image is:
+---[RSA 3072]----+
|   ...=o+=*. E   |
|    .o.*.=..+ o  |
|     .=.o o. = . |
|  .  .+... .. . .|
| . . . +S.     + |
|  . o ..o . o * .|
|   . .   . . = * |
|             oooo|
|            ..+.o|
+----[SHA256]-----+

Примечание: Если вы случайно нажмёте Enter, не введя фразу пароля, ключ будет создан без неё. В этом случае вы можете удалить файлы и снова выполнить команду, убедившись, что введёте mypassphrase, когда вас попросят.

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

ssh-copy-id -i ~/.ssh/id_rsa_passphrase.pub labex@localhost

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

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/labex/.ssh/id_rsa_passphrase.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

Number of key(s) added: 1

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

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

ssh -i ~/.ssh/id_rsa_passphrase labex@localhost

Если вы установили фразу пароля для ключа, вам будет предложено её ввести. Однако, если вы случайно создали ключ без фразы пароля (как показано в примере вывода), вы войдёте в систему напрямую:

Last login: Пн Июн  9 01:39:25 2025 с 47.251.66.143
[labex@host ~]$

Вы вошли в систему. Теперь выйдите из сессии:

exit
exit
Connection to localhost closed.
[labex@host ~]$

Примечание: Если у вашего ключа нет фразы пароля, вы всё равно можете продолжить демонстрацию ssh-agent, чтобы понять, как она работает, даже если в этом случае не будет запроса фразы пароля.

Сначала запустите ssh-agent в вашей текущей сессии оболочки. Команда eval используется для правильной установки переменных среды, которые выводит ssh-agent.

eval "$(ssh-agent)"
Agent pid 1024

Вывод покажет идентификатор процесса (PID) ssh-agent.

Далее добавьте свой закрытый ключ (id_rsa_passphrase) в ssh-agent.

ssh-add ~/.ssh/id_rsa_passphrase

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

Identity added: /home/labex/.ssh/id_rsa_passphrase (labex@6846375f1c0e35fea6cb03e6)

Теперь, когда ключ добавлен в ssh-agent, попробуйте снова подключиться к localhost с помощью того же ключа.

ssh -i ~/.ssh/id_rsa_passphrase labex@localhost

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

Last login: Пн Июн  9 01:39:49 2025 с 127.0.0.1
[labex@host ~]$

Вы успешно использовали ssh-agent для управления своим SSH-ключом.

Важное примечание: Переменные среды ssh-agent доступны только в сессии оболочки, где вы их запустили. Если вы находитесь в SSH-сессии, вам нужно вернуться в локальную оболочку, чтобы использовать команды ssh-add.

Сначала выйдите из SSH-сессии:

exit
exit
Connection to localhost closed.
[labex@host ~]$

Теперь, чтобы увидеть ключи, загруженные в ваш ssh-agent, вы можете использовать ssh-add -l:

ssh-add -l

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

3072 SHA256:BuSxVlJb1lsiUFi2I5DAvyL01fJ5d480LT86dgtcHEg /home/labex/.ssh/id_rsa_passphrase (RSA)

Однако, если вы видите сообщение об ошибке, такое как "Could not open a connection to your authentication agent", это означает, что переменные среды агента не установлены в вашей текущей сессии.

Чтобы удалить все идентификаторы из ssh-agent, используйте ssh-add -D:

ssh-add -D

Если агент доступен, вы увидите:

All identities removed.

Однако, если вы видите "Could not open a connection to your authentication agent", это означает, что среда агента недоступна в вашей текущей сессии.

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

ssh -i ~/.ssh/id_rsa_passphrase labex@localhost

Если у вашего ключа есть фраза пароля, вы увидите:

Enter passphrase for key '/home/labex/.ssh/id_rsa_passphrase':

Если у вашего ключа нет фразы пароля, вы всё равно сможете подключиться напрямую. Нажмите Ctrl+C, чтобы отменить попытку подключения, если вас попросят ввести фразу пароля.

Наконец, чтобы остановить процесс ssh-agent, вы можете использовать ssh-agent -k:

ssh-agent -k

Если переменная среды SSH_AGENT_PID не установлена, вы можете увидеть:

SSH_AGENT_PID not set, cannot kill agent

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

Устранение неполадок подключения SSH

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

Команда ssh предлагает три уровня подробности: -v, -vv и -vvv. Каждая дополнительная v увеличивает количество отображаемой отладочной информации.

Начнём с попытки подключения к несуществующему порту на localhost, чтобы продемонстрировать отказ подключения и увидеть вывод отладки.

Сначала попробуем подключиться с -v (подробно) к порту 2222 (который, скорее всего, не запущен):

ssh -v -p 2222 labex@localhost

Вы увидите вывод, похожий на этот, указывающий на отказ подключения:

OpenSSH_8.7p1, OpenSSL 3.0.1 14 Dec 2021
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Reading configuration data /etc/ssh/ssh_config.d/01-training.conf
debug1: /etc/ssh/ssh_config.d/01-training.conf line 1: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config.d/50-redhat.conf
debug1: /etc/ssh/ssh_config.d/50-redhat.conf line 3: Applying options for *
debug1: Connecting to localhost [127.0.0.1] port 2222.
ssh: connect to host localhost port 2222: Connection refused

Теперь попробуем с -vv (более подробно):

ssh -vv -p 2222 labex@localhost

Вывод будет более подробным, предоставляя дополнительные сообщения отладки:

OpenSSH_8.7p1, OpenSSL 3.0.1 14 Dec 2021
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Reading configuration data /etc/ssh/ssh_config.d/01-training.conf
debug1: /etc/ssh/ssh_config.d/01-training.conf line 1: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config.d/50-redhat.conf
debug1: /etc/ssh/ssh_config.d/50-redhat.conf line 3: Applying options for *
debug2: resolving "localhost" port 2222
debug2: ssh_connect_direct: entering
debug1: Connecting to localhost [127.0.0.1] port 2222.
debug1: connect to address 127.0.0.1 port 2222: Connection refused
ssh: connect to host localhost port 2222: Connection refused

Наконец, попробуем с -vvv (наиболее подробно):

ssh -vvv -p 2222 labex@localhost

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

OpenSSH_8.7p1, OpenSSL 3.0.1 14 Dec 2021
debug3: ssh_connect_internal: entering
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Reading configuration data /etc/ssh/ssh_config.d/01-training.conf
debug1: /etc/ssh/ssh_config.d/01-training.conf line 1: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config.d/50-redhat.conf
debug1: /etc/ssh/ssh_config.d/50-redhat.conf line 3: Applying options for *
debug2: resolving "localhost" port 2222
debug2: ssh_connect_direct: entering
debug1: Connecting to localhost [127.0.0.1] port 2222.
debug1: connect to address 127.0.0.1 port 2222: Connection refused
ssh: connect to host localhost port 2222: Connection refused

В данном случае ошибка «Connection refused» чётко указывает на отсутствие SSH-сервера, работающего на порту 2222.

Теперь давайте смоделируем распространённую проблему: изменение ключа хоста. В первом шаге вы подключились к localhost, и его открытый ключ был добавлен в ваш файл ~/.ssh/known_hosts. Если ключ SSH-сервера изменится (например, из-за переустановки сервера или вредоносной атаки), ваш SSH-клиент обнаружит это несоответствие и откажется от подключения.

Чтобы смоделировать это, мы намеренно изменим запись known_hosts для localhost, сделав её недействительной.

Сначала откройте файл ~/.ssh/known_hosts с помощью nano:

nano ~/.ssh/known_hosts

Вы увидите несколько строк с различными типами ключей:

localhost ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHvl7dcZkvMNOr3cjKjlR2/JgFbGpURThT/bHnLZN6gG
localhost ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCynhy3601o9ZSGZoY0KB/QSonk5ykod2Tb7sCAqVn4ZgTCwd96BhPjJLPNQ6ldNASo1e7EzfT4BUjG5T0ZDRhgaI65qmDwITWipTWUfmYT5XoScyf6NDhcRxYiJwztFEkOvLcPhelS6UXj5Z7HdmYH4Nc5wiF00Wah3Jc0/2CfQsFZCXTn/7Kp8KKbBbPqPzr2R3WIULEacOxx9HKVv+2TvYg/OHZz40hTsr1c68DD7h5PMBNe21YB3HLRRk2LQEC7v7BFD+DCek9GNR66JBjbLDljtwWCaPCY0UntBjjvJ3W2LhX5RDZQHV/iaUSj2tEXnvPt9KSqGfBS91D12dBXyOmWVnTpvvI17BdDkEeefas2Uz4d7Bv/PDxZR6IKkaIGQ/ZnRhSEhBNvfqlBGqkOhRr6jQJK+rQMnsZCT6OEgW7osWzkw5Bs1wY/RNToeQqrRMclqffO9plFI688N2iT86+nxrvBVZg4yMMm2J1lleaBvinXCB8jE6lrtwoAdgk=
localhost ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKYWY8Ty6TrbQS/0fUljBWuUpkyPCS/5P6ZwxhSYsqjRBIprMANI/JQotZqHYq2w3b2X/n8O+J3/WuIB6XMl1f4=

Выберите одну из строк для изменения. В этом примере изменим ключ ED25519 (первая строка). Измените несколько символов в длинной строке ключа (например, измените последний символ с G на A). Будьте осторожны, не удаляйте всю строку или другие части файла.

Например, измените: ...ZN6gG на: ...ZN6gA

Сохраните файл, нажав Ctrl+X, затем Y для подтверждения сохранения и Enter для подтверждения имени файла.

Теперь попробуйте снова подключиться к localhost:

ssh labex@localhost

Вы получите предупреждение о смене ключа хоста:

...

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

Для исправления этого вы можете либо вручную отредактировать ~/.ssh/known_hosts и удалить проблемную строку, либо использовать ssh-keygen -R, чтобы удалить запись для localhost.

Давайте используем ssh-keygen -R для удаления неверной записи:

ssh-keygen -R localhost
...

Теперь попробуйте снова подключиться к localhost:

ssh labex@localhost

Вам будет предложено подтвердить подлинность хоста, как и в первый раз при подключении.

...

Вы успешно подключились снова с помощью аутентификации на основе ключей.

Выйдите из сессии:

exit
...

Настройка конфигурации SSH-клиента

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

Файл ~/.ssh/config — мощный инструмент для управления вашими SSH-соединениями. Вы можете указать различные параметры, такие как имя пользователя, файл закрытого ключа для использования, номер порта и даже более продвинутые настройки, такие как команды прокси.

Сначала создадим или откроем файл ~/.ssh/config. Если его нет, nano создаст его.

nano ~/.ssh/config

Добавим в файл следующую конфигурацию. Эта конфигурация определяет псевдоним localhost_labex для подключения к localhost как пользователю labex и псевдоним localhost_root для подключения как пользователю root. Она также явно указывает IdentityFile для пользователя labex, чтобы использовать ключ id_rsa, сгенерированный на предыдущем шаге.

Host localhost_labex
    HostName localhost
    User labex
    IdentityFile ~/.ssh/id_rsa

Host localhost_root
    HostName localhost
    User root

Сохраните файл, нажав Ctrl+X, затем Y для подтверждения сохранения и Enter для подтверждения имени файла.

Теперь попробуем подключиться к localhost с помощью этих новых псевдонимов.

Подключимся как labex с помощью псевдонима localhost_labex:

ssh localhost_labex

Поскольку вы настроили IdentityFile ~/.ssh/id_rsa, и у id_rsa нет фразы пароля, вы должны войти в систему без запроса пароля.

Last login: Пн Июн  9 01:54:16 2025 с 47.251.66.143
[labex@host ~]$

Выйдите из сессии:

exit
exit
Connection to localhost closed.
[labex@host ~]$

Теперь подключимся как root с помощью псевдонима localhost_root:

ssh localhost_root

Вам будет предложено ввести пароль пользователя root. Однако, поскольку вход root отключён в этой среде, вы получите сообщение "Permission denied":

root@localhost's password:
Permission denied, please try again.
root@localhost's password:

Нажмите Ctrl+C, чтобы отменить попытку подключения:

^C

Это демонстрирует, что псевдоним SSH-конфигурации работает, но подключение терпит неудачу из-за политики безопасности, которая отключает вход root.

Как видите, использование файла ~/.ssh/config упрощает ваши SSH-команды, предварительно настраивая общие параметры подключения.

Добавим ещё одну запись, чтобы продемонстрировать указание другого порта. В то время как localhost использует стандартный SSH-порт (22), этот пример показывает, как вы бы его настраивали, если бы он был другим.

Откройте файл ~/.ssh/config снова:

nano ~/.ssh/config

Добавьте следующую запись. Это создаёт псевдоним localhost_port_example, который явно устанавливает порт на 2222. (Примечание: localhost фактически не прослушивает порт 2222, поэтому это подключение потерпит неудачу, но это демонстрирует настройку.)

Host localhost_labex
    HostName localhost
    User labex
    IdentityFile ~/.ssh/id_rsa

Host localhost_root
    HostName localhost
    User root

Host localhost_port_example
    HostName localhost
    Port 2222
    User labex

Сохраните файл.

Теперь попробуйте подключиться с помощью псевдонима localhost_port_example:

ssh localhost_port_example

Это подключение потерпит неудачу, потому что localhost не прослушивает порт 2222, но это демонстрирует, как указать пользовательский порт в вашей SSH-конфигурации.

ssh: connect to host localhost port 2222: Cannot assign requested address

You can find some explanations for typical errors at this link:
            https://red.ht/support_rhel_ssh

Вы можете просмотреть текущую SSH-конфигурацию, чтобы увидеть все определённые хосты:

cat ~/.ssh/config
...

Наконец, очистим файл ~/.ssh/config, удалив запись localhost_port_example.

Откройте файл ~/.ssh/config:

nano ~/.ssh/config

Удалите блок Host localhost_port_example. Файл должен выглядеть так:

Host localhost_labex
    HostName localhost
    User labex
    IdentityFile ~/.ssh/id_rsa

Host localhost_root
    HostName localhost
    User root

Сохраните файл.

Настройка безопасности сервера OpenSSH

В этом разделе вы узнаете о лучших практиках безопасности сервера OpenSSH, изучив текущую конфигурацию безопасности. Вы поймете, как ограничения на вход для root и настройки аутентификации по паролю работают для защиты вашего сервера от несанкционированного доступа.

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

Понимание безопасности входа для root

Прямой вход для root через SSH обычно не рекомендуется, поскольку учетная запись root обладает полными административными привилегиями. Если злоумышленник получит доступ к учетной записи root, он получит полный контроль над вашей системой. Безопаснее входить как обычный пользователь, а затем использовать sudo для выполнения административных задач.

Давайте изучим текущую конфигурацию входа для root и проверим ее эффективность.

Сначала войдите через SSH как пользователь labex.

ssh labex@localhost

Вы должны войти без пароля, если настройка SSH-ключей из предыдущих шагов выполнена правильно.

Last login: Mon Jun  9 01:57:27 2025 from 47.251.66.143
[labex@host ~]$

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

sudo cat /etc/ssh/sshd_config | grep -E "^PermitRootLogin|^#PermitRootLogin"

Эта команда покажет вам текущую настройку PermitRootLogin. Вы должны увидеть что-то вроде:

PermitRootLogin no

Эта настройка означает, что прямой вход для root через SSH отключен, что является лучшей практикой безопасности.

Давайте проверим, действительно ли заблокирован вход для root. Сначала выйдите из текущей сессии SSH:

exit
exit
Connection to localhost closed.
[labex@host ~]$

Теперь попытайтесь войти как root в localhost:

ssh root@localhost

Вы должны увидеть сообщение "Permission denied" (Отказано в доступе), указывающее, что прямой вход для root не разрешен (это может быть уже настроено в вашей среде).

root@localhost's password:
Permission denied, please try again.
root@localhost's password:
Permission denied, please try again.
root@localhost's password:

Это подтверждает, что вход для root отключен в этой среде, что является желаемой конфигурацией безопасности. Сообщение "Permission denied" демонстрирует, что мера безопасности работает эффективно.

Понимание безопасности аутентификации по паролю

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

Давайте изучим текущую настройку аутентификации по паролю и поймем, как она работает.

Войдите через SSH как пользователь labex (используя ваш SSH-ключ):

ssh labex@localhost
Last login: Mon Jun  9 01:57:32 2025 from 127.0.0.1
[labex@host ~]$

Сначала давайте проверим текущую настройку PasswordAuthentication:

sudo cat /etc/ssh/sshd_config | grep PasswordAuthentication
PasswordAuthentication yes
## PasswordAuthentication.  Depending on your PAM configuration,
## PAM authentication, then enable this but set PasswordAuthentication

Как вы можете видеть, в настоящее время настроено PasswordAuthentication yes, что означает, что аутентификация по паролю включена. Хотя это позволяет пользователям аутентифицироваться с помощью паролей, это также представляет угрозу безопасности, поскольку делает сервер уязвимым для атак методом перебора паролей.

Вывод показывает:

  • PasswordAuthentication yes - это активная настройка, которая включает аутентификацию по паролю
  • Закомментированные строки предоставляют дополнительный контекст о конфигурации PAM

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

Выйдите из текущей сессии SSH:

exit
exit
Connection to localhost closed.
[labex@host ~]$

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

ssh labex@localhost

Это должно пройти успешно без запроса пароля, используя ваш SSH-ключ:

Last login: Mon Jun  9 02:00:22 2025 from 127.0.0.1
[labex@host ~]$

Это демонстрирует несколько важных концепций безопасности:

  1. Аутентификация по паролю включена (PasswordAuthentication yes) - пользователи могут входить как с паролями, так и с SSH-ключами
  2. Аутентификация на основе SSH-ключей работает должным образом - доступен более безопасный метод аутентификации
  3. Сервер разрешает оба метода аутентификации - хотя это удобно, это может представлять угрозу безопасности из-за атак методом перебора
  4. Вход для root отключен - административный доступ требует надлежащей эскалации прав пользователя

Рекомендация по безопасности: Для производственных сред рассмотрите возможность установки PasswordAuthentication no, чтобы повысить безопасность, заставив пользователей использовать только аутентификацию на основе SSH-ключей.

Выйдите из сессии:

exit
exit
Connection to localhost closed.
[labex@host ~]$

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

Резюме

В этой лабораторной работе участники изучили доступ к системам с помощью SSH, начиная с проверки установки openssh-clients и подключения к localhost через SSH. Они практиковались в аутентификации с помощью пароля и поняли начальную проверку подлинности хоста.

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