Вопрос или проблема
Я пытаюсь настроить свой сервер, чтобы отключить аутентификацию по паролю, сейчас я использую ключи.
Проблема в том, что PasswordAuthentication no
установлено, но это не дало результата. Меня по-прежнему просят ввести пароль, даже несмотря на эту настройку.
Более подробно:
- Я подключаюсь к Ubuntu Server 14.04 с помощью PuTTY на Windows 10.
ssh -v
показывает, что сначала используется мой ключ, а затем – клавиатурно-интерактивный вход.- Я убедился, что редактировал
sshd_config
, а неssh_config
. - Я перезапустил
ssh
после применения изменений, когда это не дало результата, я перезагрузил весь сервер, но эффект остался тем же. - У меня есть этот точно такой же файл конфигурации на другом сервере 14.04 с точно таким же ключом, но там проблем нет, и аутентификация по паролю отключена.
Почему аутентификация по паролю не отключена, как и должно быть, и как я могу это исправить?
Это весь файл sshd_config
без всех закомментированных строк для краткости.
Port 612
Protocol 2
HostKey /etc/ssh/ssh_host_ed25519_key
HostKey /etc/ssh/ssh_host_rsa_key
KexAlgorithms [email protected],diffie-hellman-group-exchange-sha256,diffie-hellman-group1-sha1
Ciphers [email protected],[email protected],[email protected],aes256-ctr,aes192-ctr,aes128-ctr
MACs [email protected],[email protected],[email protected],[email protected],hmac-sha2-512,hmac-sha2-256,hmac-ripemd160,[email protected]
UsePrivilegeSeparation yes
KeyRegenerationInterval 3600
ServerKeyBits 1024
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
PasswordAuthentication no
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
UsePAM yes
Дело в том, что аутентификация по паролю с использованием PAM
(как на всех современных системах) управляется опцией ChallengeResponseAuthentication
, которая по умолчанию имеет значение yes
.
ChallengeResponseAuthentication
Указывает, разрешена ли аутентификация с учетом вызова и ответа (например, через PAM). Значение по умолчанию – “yes”.
Это упоминается много раз в примере sshd_config
.
# Если вы просто хотите, чтобы проверки учетной записи и сессии PAM выполнялись без
# аутентификации PAM, то включите это, но установите PasswordAuthentication
# и ChallengeResponseAuthentication в 'no'.
Добавьте это в свой sshd_config
со значением no
, перезапустите, и это сработает для вас:
ChallengeResponseAuthentication no
В зависимости от дистрибутивов Linux, если вы используете Ubuntu 22, попробуйте следующее:
sshd -T | grep passwordauthentication
Если вы видите вывод passwordauthentication yes
, некоторые конфигурации установлены ранее, чем по умолчанию /etc/ssh/sshd_config, они находятся в /etc/ssh/sshd_config.d/
, вы можете поискать passwordauthentication
среди них или просто удалить их с помощью
rm /etc/ssh/sshd_config.d/*
Одна глупая ошибка, которую я сделал (и потратил время, чтобы понять), заключалась в том, что вместо редактирования sshd_config
я редактировал ssh_config
, и это было причиной того, что изменения не привели к ожидаемому результату.
В моем случае никакие изменения в sshd_config
не вступали в силу при свежей установке Ubuntu Server на Raspberry Pi 4. Удаление openssh-server
и его переустановка решило проблему.
Команды для справки:
apt purge openssh-server
rm -rf /etc/ssh (может понадобиться, если использовать apt remove)
apt install openssh-server
В моем случае я заметил, что PasswordAuthentication был перезаписан файлом /etc/ssh/sshd_config.d/50-cloud-init.conf
Я изменил этот файл, и это решило проблему.
Ответ или решение
Проблема с отключением аутентификации по паролю при использовании SSH может возникнуть по нескольким причинам, даже если вы корректно настроили sshd_config
. Давайте подробно рассмотрим, почему параметр PasswordAuthentication no
не имеет ожидаемого эффекта и что можно сделать для решения этой проблемы.
1. Проверка конфигурационного файла SSH
Первое, на что следует обратить внимание — это правильность редактирования файла конфигурации. Вы упомянули, что редактировали именно sshd_config
, что является правильным решением. Однако, чтобы удостовериться в отсутствии проблем, можно выполнить проверку, выполнив команду:
sshd -T | grep passwordauthentication
Это покажет вам текущее состояние параметра PasswordAuthentication
. Если он возвращает значение yes
, это указывает на наличие дополнительных конфигурационных файлов, которые могут переопределять настройки.
2. Конфигурационные файлы в /etc/ssh/sshd_config.d/
Современные дистрибутивы Linux, такие как Ubuntu, могут использовать конфигурационные файлы, находящиеся в директории /etc/ssh/sshd_config.d/
. Конфигурация в этих файлах имеет более высокий приоритет. Например, файл 50-cloud-init.conf
может переопределять ваше значение PasswordAuthentication
. Проверьте наличие таких файлов и их содержимое.
Если в одном из этих файлов указано PasswordAuthentication yes
, вам необходимо либо изменить его на no
, либо удалить файл, если он не является критически важным.
3. ChallengeResponseAuthentication
Параметр PasswordAuthentication
не единственный, влияющий на возможность аутентификации. По умолчанию включен параметр ChallengeResponseAuthentication
, который может разрешить аутентификацию через PAM (Pluggable Authentication Modules). Чтобы полностью отключить аутентификацию по паролю, вы также должны установить:
ChallengeResponseAuthentication no
После внесения этих изменений, не забудьте перезапустить SSH-сервер с помощью команды:
sudo service ssh restart
4. Перезапуск SSH-сервера
Вы упомянули, что вы перезапустили службу SSH, но если изменения не применяются, возможно, не все конфигурационные файлы были загружены правильно. Полный перезапуск системы также может помочь, особенно если изменения не записываются в память.
5. Переустановка OpenSSH
Если ни один из вышеописанных методов не сработал, возможно, ваш пакет OpenSSH поврежден или неправильно установлен. В таком случае можно воспользоваться следующими командами для полного удаления и повторной установки OpenSSH:
sudo apt purge openssh-server
sudo rm -rf /etc/ssh
sudo apt install openssh-server
6. Заключение
Если все шаги пройдены, а проблема остается, рекомендуется проверить логи SSH для детального анализа возможных ошибок. Логирование может быть полезно для выявления любой аномалии, которая мешает отключению аутентификации по паролю:
sudo tail -f /var/log/auth.log
Эти шаги должны помочь вам решить проблему с отключением аутентификации по паролю в SSH. Надеюсь, данная информация окажется полезной.