CentOS 7.9 上按等保要求配了 AllowUsers deploy,之后 Ansible 用 ansible 账号批量执行全部报 Permission denied,ssh -v 显示 Authentications that can continue: publickey,密钥本身是好的。

一开始怀疑是「配置写在 Match 块里,作用范围和预期不一致」,查了一圈,方向不对。

把日志和配置对完,能解释这个现象的基本就这几处。AllowUsers 只列了 deploy,其他账号在认证前就被拒绝。还有一种是用了 AllowUsers 但没写完整的主机或网段匹配。

另外,存在多行 AllowUsers,后一行覆盖了前一行。

第一件事是确认白名单和拒绝日志

sshd -T | grep -i allowusers && journalctl -u sshd -n 50 | grep -i 'not allowed'

随后把运维账号一起加进白名单

sed -i 's/^AllowUsers.*/AllowUsers deploy ansible/' /etc/ssh/sshd_config

需要限制来源就带上地址匹配

printf 'AllowUsers deploy@10.0.0.* ansible@10.0.0.0/24\n' >> /etc/ssh/sshd_config

校验重启并用自动化账号复测

sshd -t && systemctl restart sshd && ssh ansible@host true

命令输出我都留了记录,免得改完记不清原来的值。

改之前先确认了最近有没有人动过配置,避免白查一遍。

改完先别撤,确认这几项。ansible 账号能正常认证并执行命令,deploy 也正常,日志里没有 not allowed 记录。

AllowUsers 在认证前生效,加白名单时容易漏掉自动化账号,改完要在 CI 或跳板机上先验证。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189