这个坑值得记一笔。CentOS 7.9 加固时把 PasswordAuthentication 改成 no,重启 sshd 后登录仍然提示 password,输密码还能进,sshd -T 里 passwordauthentication 显示 no,但 keyboard-interactive 还是 yes。

刚开始盯着「配置被 Include 的 drop-in 文件覆盖」,折腾了半个多小时,排掉了。

把日志和配置对完,能解释这个现象的基本就这几处。ChallengeResponseAuthentication 或 KbdInteractiveAuthentication 没关;认证走的是 PAM 的 keyboard-interactive,不是 password;有多份 sshd 配置,改的不是实际加载的那份。

上来先确认实际生效的认证方式

sshd -T | grep -iE 'passwordauth|kbdinteractive|challengeresp'

随后关掉 keyboard-interactive

sed -i 's/^KbdInteractiveAuthentication.*/KbdInteractiveAuthentication no/' /etc/ssh/sshd_config

再往下检查 Include 的配置片段

grep -rn 'PasswordAuthentication' /etc/ssh/sshd_config.d/

校验重启后不带密钥复测

sshd -t && systemctl restart sshd && ssh -o PubkeyAuthentication=no user@host

排查用的命令都是临时敲的,没有写成脚本,事后才整理。

手上没有现成的复现脚本,就照着线上请求手工拼了一个。

报错是间歇性的,我蹲守了半小时才抓到一次完整现场。

怎么算真的好了,看的是同一批现象。不带密钥登录直接返回 Permission denied (publickey),不再弹密码输入,带密钥登录正常。

PasswordAuthentication 只管 password 这一种方式,PAM 交互是另一条路径,加固时两个都要关。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189