Как заставить использовать SSH-ключи в Ubuntu 22.04 и отключить аутентификацию по паролю

Вопрос или проблема

Я видел довольно много постов о SSH, но решения, которые там приведены, похоже, не работают для меня. Я сгенерировал SSH-ключ на своем локальном компьютере с Fedora с помощью команды ssh-keygen. Затем я скопировал открытый ключ на удаленный сервер Ubuntu 22.04.

Ниже приведена копия того, как выглядит мой файл sshd_config на удаленном сервере Ubuntu 22.04.

После внесения следующих изменений я выполнил команду sudo systemctl reload sshd, а также пытался выполнить команду sudo systemctl restart sshd, но SSH-ключ, похоже, не работает.

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

Что я пытаюсь достичь:

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

Я хочу поблагодарить всех заранее за помощь.

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.

Решение: либо:

  1. переместите строку PasswordAuthentication no перед строкой Include /etc/ssh/sshd_config.d/*.conf в вашем файле /etc/ssh/sshd_config, либо
  2. отредактируйте проблемный файл в каталоге /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

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

  1. Переместите строку PasswordAuthentication no выше директивы Include в конфигурационном файле sshd_config:
PermitRootLogin yes
PubkeyAuthentication yes
PasswordAuthentication no
Include /etc/ssh/sshd_config.d/*.conf
  1. Либо отредактируйте файл в директории /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.

Оцените материал
Добавить комментарий

Капча загружается...