这个坑值得记一笔。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 交互是另一条路径,加固时两个都要关。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
