Безопасный 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, могут быть уже настроены. Это стандартная практика, демонстрирующая применение принципов безопасности на деле.

Перед подключением к удаленным системам подготовьте лабораторную среду: установите пакеты OpenSSH-клиента и сервера, а также запустите службу SSH. SSH использует архитектуру «клиент-сервер»: клиент (ssh) инициирует соединения, а сервер (sshd) принимает их. Вы также установите nano, который понадобится позже для редактирования конфигурационных файлов SSH.

Выполните следующую команду для установки необходимых пакетов. Флаг -y автоматически подтверждает запросы на установку:

sudo dnf install -y openssh-clients openssh-server nano

Запустите службу SSH и настройте ее автозапуск при загрузке системы:

sudo systemctl start sshd
sudo systemctl enable sshd

Проверьте, что служба SSH запущена:

sudo systemctl status sshd

В выводе вы должны увидеть Active: active (running). Нажмите q, чтобы выйти из режима просмотра статуса.

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

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

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

Попробуем подключиться к localhost под текущим пользователем:

ssh localhost

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

The authenticity of host 'localhost (127.0.0.1)' can't be established.
ED25519 key fingerprint is SHA256:h5k1mmPFylpxUCsKx+Mf8rN4wOrk9TmyRfzTvGWRm7A.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'localhost' (ED25519) to the list of known hosts.
labex@localhost's password:

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

labex@localhost's password:
Last login: Mon Jun  9 01:34:39 2025 from 47.251.66.143
[labex@host ~]$

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

Чтобы завершить SSH-сессию, используйте команду exit:

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

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

ssh root@localhost

Вас попросят ввести пароль root. Однако вы можете увидеть сообщение «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 отключен, это ожидаемое поведение, демонстрирующее передовую практику безопасности. Вы можете нажать Ctrl+C, чтобы отменить попытку подключения.

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

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

ssh labex@localhost hostname

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

labex@localhost's password:
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 Jun  9 01:37 id_rsa
-rw-r--r-- 1 labex labex  584 Jun  9 01:37 id_rsa.pub
-rw------- 1 labex labex  825 Jun  9 01:35 known_hosts
-rw-r--r-- 1 labex labex   91 Jun  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 без запроса пароля.

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

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

Чтобы выйти из удаленной сессии, введите exit:

exit
exit
Connection to localhost closed.
[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: Mon Jun  9 01:39:25 2025 from 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: Mon Jun  9 01:39:49 2025 from 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 предоставляет опции подробного вывода (verbose), которые помогают диагностировать проблемы, показывая детальную информацию о процессе подключения.

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

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

Сначала попробуйте использовать -v (verbose) для подключения к порту 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 ясно указывает на то, что на порту 2222 не запущен SSH-сервер.

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

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

Сначала откройте файл ~/.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

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

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:h5k1mmPFylpxUCsKx+Mf8rN4wOrk9TmyRfzTvGWRm7A.
Please contact your system administrator.
Add correct host key in /home/labex/.ssh/known_hosts to get rid of this message.
Offending key in /home/labex/.ssh/known_hosts:1
ED25519 host key for localhost has changed and you have requested strict checking.
Host key verification failed.

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

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

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

ssh-keygen -R localhost
## Host localhost found: line 1
## Host localhost found: line 2
## Host localhost found: line 3
/home/labex/.ssh/known_hosts updated.
Original contents retained as /home/labex/.ssh/known_hosts.old

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

ssh labex@localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ED25519 key fingerprint is SHA256:h5k1mmPFylpxUCsKx+Mf8rN4wOrk9TmyRfzTvGWRm7A.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'localhost' (ED25519) to the list of known hosts.
Last login: Mon Jun  9 01:40:03 2025 from 127.0.0.1
[labex@host ~]$

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

Завершите сессию:

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

Настройка конфигураций 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: Mon Jun  9 01:54:16 2025 from 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
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

Наконец, давайте очистим файл ~/.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 и аутентификации по паролю, углубив свое понимание методов безопасного удаленного доступа.