Вопрос или проблема
Я видел довольно много постов о SSH, но решения, которые там приведены, похоже, не работают для меня. Я сгенерировал SSH-ключ на своем локальном компьютере с Fedora с помощью команды ssh-keygen. Затем я скопировал открытый ключ на удаленный сервер Ubuntu 22.04.
Ниже приведена копия того, как выглядит мой файл sshd_config на удаленном сервере Ubuntu 22.04.
После внесения следующих изменений я выполнил команду sudo systemctl reload sshd
, а также пытался выполнить команду sudo systemctl restart sshd
, но SSH-ключ, похоже, не работает.
Чтобы дополнительно подтвердить, что мой SSH-ключ не работает, я переместил файл моего закрытого SSH-ключа в другое место.
Что я пытаюсь достичь:
- Пользователи должны иметь пару SSH-ключей для входа в систему.
- Парольная аутентификация должна быть отключена.
Я хочу поблагодарить всех заранее за помощь.
Include /etc/ssh/sshd_config.d/*.conf
#Port 22
Port 2222
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key
# Шифры и ключи
#RekeyLimit default none
# Журналирование
#SyslogFacility AUTH
#LogLevel INFO
# Аутентификация:
#LoginGraceTime 2m
PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
PubkeyAuthentication yes
# Ожидание .ssh/authorized_keys2 будет по умолчанию проигнорировано в будущем.
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
#AuthorizedPrincipalsFile none
#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody
# Для этого также необходимы ключи хоста в /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Измените на yes, если вы не доверяете ~/.ssh/known_hosts для
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Не читаете файлы пользователя ~/.rhosts и ~/.shosts
#IgnoreRhosts yes
# Чтобы отключить туннелирование паролей в открытом виде, измените здесь на no!
PasswordAuthentication no
#PermitEmptyPasswords no
#AllowUsers richardm
# Измените на yes, чтобы включить пароли с подтверждением (осторожно с проблемами с
# некоторыми модулями PAM и потоками)
KbdInteractiveAuthentication no
# Опции Kerberos
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
# Опции GSSAPI
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no
# Установите это в 'yes', чтобы включить аутентификацию PAM, обработку учетных записей,
# и обработку сеансов. Если это включено, аутентификация PAM будет
# разрешена через KbdInteractiveAuthentication и
# PasswordAuthentication. В зависимости от вашей конфигурации PAM,
# аутентификация PAM через KbdInteractiveAuthentication может обойти
# установку "PermitRootLogin without-password".
# Если вы просто хотите, чтобы проверки учетной записи и сеанса PAM выполнялись без
# аутентификации PAM, то включите это, но установите PasswordAuthentication
# и KbdInteractiveAuthentication в 'no'.
UsePAM yes
#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
PrintMotd no
#PrintLastLog yes
#TCPKeepAlive yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS no
#PidFile /run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none
# нет пути к баннеру по умолчанию
#Banner none
# Позволить клиенту передавать переменные окружения локали
AcceptEnv LANG LC_*
# переопределение по умолчанию для подсистем
Subsystem sftp /usr/lib/openssh/sftp-server
# Пример переопределения настроек на основе пользователя
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# PermitTTY no
# ForceCommand cvs server
Настройка, с которой вы столкнулись первой, является той, которая применяется.
В вашем случае строка Include /etc/ssh/sshd_config.d/*.conf
загружает все файлы конфигурации в каталоге /etc/ssh/sshd_config.d
. Таким образом, любые настройки в них будут рассмотрены первыми и, следовательно, применены, независимо от любых противоречий, найденных в последующих строках вашего файла /etc/ssh/sshd_config
.
Решение: либо:
- переместите строку
PasswordAuthentication no
перед строкойInclude /etc/ssh/sshd_config.d/*.conf
в вашем файле/etc/ssh/sshd_config
, либо - отредактируйте проблемный файл в каталоге
/etc/ssh/sshd_config.d
и установитеPasswordAuthentication no
.
Ответ или решение
Настройка SSH-ключей и отключение аутентификации по паролю на Ubuntu 22.04 – это важный аспект обеспечения безопасности вашего сервера. В данной инструкции подробно рассмотрим, как правильно выполнить эти действия, основываясь на вашем запросе и предоставленной информации.
1. Генерация SSH-ключа
Перед тем как начать любые изменения на сервере, убедитесь, что вы правильно сгенерировали SSH-ключ на своей локальной машине (в вашем случае, на Fedora) с помощью следующей команды:
ssh-keygen -t rsa -b 4096
С данным ключом важно сохранить его в безопасном месте. По умолчанию приватный ключ будет сохранён в ~/.ssh/id_rsa
, а публичный — в ~/.ssh/id_rsa.pub
.
2. Копирование публичного ключа на сервер
Скопируйте ваш публичный ключ на ваш удалённый сервер Ubuntu 22.04 следующим образом:
ssh-copy-id -i ~/.ssh/id_rsa.pub username@server_ip
3. Настройка файла конфигурации SSH на сервере
Теперь необходимо убедиться, что ваш файл конфигурации SSH (/etc/ssh/sshd_config
) настроен правильно. По вашему описанию, в файле sshd_config
, вам нужно убедиться, что указаны следующие параметры:
PubkeyAuthentication yes
PasswordAuthentication no
Однако важный момент заключается в том, что ваш файл содержит директиву:
Include /etc/ssh/sshd_config.d/*.conf
Эта директива подразумевает, что настройки из всех файлов в указанной директории будут применены в первую очередь, что может привести к переопределению ваших настроек. Для решения проблемы с настройкой файлов, действуйте следующим образом:
- Переместите строку
PasswordAuthentication no
выше директивыInclude
в конфигурационном файлеsshd_config
:
PermitRootLogin yes
PubkeyAuthentication yes
PasswordAuthentication no
Include /etc/ssh/sshd_config.d/*.conf
-
Либо отредактируйте файл в директории
/etc/ssh/sshd_config.d/
, устанавливая в нёмPasswordAuthentication no
:Найдите файл, который может переопределять вашу настройку (например,
ubuntu-server.conf
или аналогичный), откройте его и добавьте или измените строку:
PasswordAuthentication no
4. Перезапуск SSH-сервиса
После внесения изменений необходимо перезапустить SSH-сервис для их применения. Используйте одну из следующих команд:
sudo systemctl reload ssh
или
sudo systemctl restart ssh
5. Проверка работоспособности
Чтобы убедиться, что ключи работают должным образом, попробуйте выполнить команду следующего вида:
ssh -i ~/.ssh/id_rsa username@server_ip -p 2222
Здесь -p 2222
— это ваш указанный порт. Если всё настроено правильно, аутентификация должна произойти без запроса пароля.
6. Устранение неполадок
Если у вас возникают проблемы, выполните следующие действия:
- Убедитесь, что ваш публичный ключ корректно добавлен в файл
~/.ssh/authorized_keys
на сервере. - Проверьте права доступа к директории
~/.ssh
и файлам внутри неё. Они должны быть следующими:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
- Проверьте журналы SSH на сервере для выявления ошибок:
sudo journalctl -u ssh --no-pager
Следуя этим шагам, вы сможете успешно настроить SSH-аутентификацию с использованием ключей и отключить вход по паролям, что существенно повысит уровень безопасности вашего сервера Ubuntu 22.04.