Ansible连接特定服务器偶发Kerberos认证失败(返回Response 200)求助
排查Ansible Kerberos随机认证失败问题
问题重现
使用Ansible对特定服务器执行ping或部署剧本时,约33%概率出现认证失败,报错信息:
UNREACHABLE! => { "changed": false, "msg": "kerberos: Unable to authenticate <Response [200]>", "unreachable": true }
排查步骤
捕获控制节点Kerberos调试日志
在运行Ansible的控制节点上临时开启Kerberos追踪:export KRB5_TRACE=/tmp/krb5_trace.log重复执行Ansible ping操作直至失败,查看日志中失败请求的具体环节,比如票据获取超时、验证失败等细节。
目标服务器Kerberos事件日志分析
在目标Windows服务器上开启Kerberos详细日志:- 打开事件查看器,定位到
应用程序和服务日志 > Microsoft > Windows > Kerberos-Key-Distribution-Center和Kerberos日志 - 右键日志选择“属性”,将日志级别设为“详细”
触发失败后,检查对应时间点的日志,查找KDC返回的错误码(如KDC_ERR_PREAUTH_FAILED)或WinRM服务处理票据的异常记录。
- 打开事件查看器,定位到
手动测试Kerberos票据获取稳定性
模拟Ansible的认证流程,手动重复获取目标服务器的SPN票据:kinit -S WSMAN/<目标服务器FQDN>@<域名> <域账号>连续执行50-100次,统计失败率。若手动执行也出现失败,说明问题在Kerberos票据获取环节;若全成功,需排查Ansible WinRM客户端的连接逻辑。
检查目标服务器Kerberos缓存与配置
- 在目标服务器执行
klist命令,查看是否存在过期票据堆积、重复票据等异常 - 对比无问题的镜像服务器,确认域组策略中Kerberos票据的
最大票据生存期、最大服务票据生存期等参数一致。
- 在目标服务器执行
网络链路稳定性排查
- 在控制节点与目标服务器、目标服务器与域控制器之间持续执行ping测试:
# Linux控制节点 ping -f -c 1000 <目标服务器IP> # Windows目标服务器 ping -t <域控制器IP> - 使用
mtr(Linux)或tracert(Windows)检查链路节点是否存在丢包,同时确认防火墙/负载均衡未对Kerberos流量(UDP/TCP 88)设置随机丢弃规则。
- 在控制节点与目标服务器、目标服务器与域控制器之间持续执行ping测试:
调整Ansible WinRM连接参数
- 在Ansible配置或剧本中调整超时参数:
winrm_connection_timeout: 60 winrm_operation_timeout_sec: 60 - 尝试禁用连接复用,添加配置:
winrm_reconnection_retries: 0
- 在Ansible配置或剧本中调整超时参数:
内容的提问来源于stack exchange,提问作者Thyica
相关产品推荐
相关产品推荐

