SSH – PasswordAuthentication no не имеет эффекта

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

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

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

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

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