先看现象。CentOS 7.9 做安全加固,把 sshd_config 里的 AuthorizedKeysFile 改成 /etc/ssh/keys/%u/authorized_keys,重启 sshd 后所有账号公钥登录都提示 Permission denied (publickey),密码登录倒是正常。

这类报错背后常见的原因有几处,逐个排除就行。新路径下没有放公钥,sshd 只认配置里的位置。还有一种是目录或文件的属主和权限不符合 StrictModes。

少数情况下是%u 展开后的路径不存在,sshd 不会自动创建。

不容易想到的是,只改了 sshd_config 没重启,或者改完被 cloud-init 覆盖。

上来先确认 sshd 实际使用的配置

sshd -T | grep -i authorizedkeysfile

随后按新路径放好公钥并修正权限

install -d -m 700 -o deploy -g deploy /etc/ssh/keys/deploy && install -m 600 -o deploy -g deploy /home/deploy/.ssh/authorized_keys /etc/ssh/keys/deploy/authorized_keys

接着检查语法后重启 sshd

sshd -t && systemctl restart sshd

末了用详细日志验证登录过程

ssh -vvv deploy@host 2>&1 | grep -i 'authorized_keys'

同事提醒我看一下最近一次发布,时间点确实对得上。

改完先别撤,确认这几项。ssh -vvv 显示 Offering public key 后认证成功,deploy 账号不用密码就能登录,其他账号也正常。

提醒一点。改 sshd 配置前先留一个不断开的会话,确认新配置能登录再退出,否则很容易把自己锁在外面。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189