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 或跳板机上先验证。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
