Ansible+Jenkins连接Windows服务器随机WinRM/Kerberos认证失败求助
问题分析与排查方案
一、针对[WARNING]: ERROR DURING WINRM SEND INPUT - attempting to recover挂起问题
该警告多与WinRM连接稳定性、资源配置或网络状态相关,并非典型Ansible Bug,可从以下方向排查:
- 目标Windows服务器WinRM资源限制:Win2016默认WinRM连接数、超时设置可能无法应对临时负载,导致会话中断。在目标服务器执行PowerShell命令调整配置:
Set-Item WSMan:\localhost\Shell\MaxShellsPerUser 50 Set-Item WSMan:\localhost\Shell\MaxMemoryPerShellMB 1024 Set-Item WSMan:\localhost\Shell\IdleTimeout 7200000 Restart-Service WinRM - Ansible端WinRM超时配置:在
ansible.cfg中增加超时参数,避免因长任务或网络延迟导致挂起:[defaults] timeout = 60 [winrm] operation_timeout_sec = 60 read_timeout_sec = 70 - 网络连通性波动:检查Jenkins节点与目标Windows服务器的网络链路,排查是否存在临时丢包、延迟过高的情况,可通过持续
ping或traceroute验证稳定性。
二、针对"msg": "kerberos: , plaintext: the specified credentials were rejected by the server"凭证拒绝问题
随机出现的凭证拒绝排除了凭证本身错误,重点排查以下场景:
- AD用户Kerberos票据异常:Jenkins节点使用的AD用户可能存在票据过期、缓存冲突。在Jenkins执行Ansible前,强制刷新Kerberos票据:
kdestroy -A && kinit user@DOMAIN.COM - AD账户临时锁定:短时间内多次触发AD防暴力策略可能导致账户临时锁定,联系AD管理员查看账户登录日志与锁定规则。
- WinRM认证方式冲突:明确指定Kerberos作为认证方式,避免多认证方式随机切换导致失败,在Ansible inventory或Playbook中添加:
ansible_winrm_transport: kerberos ansible_winrm_kerberos_delegation: yes
三、是否为Ansible Bug?
当前随机失败且重试可成功的表现,更倾向于环境配置或版本兼容性问题,而非核心Bug。但Ansible 2.9.10属于停更的老版本,存在部分已修复的WinRM会话管理瑕疵,可尝试升级至2.9系列最新版本(如2.9.27),该版本修复了多个WinRM稳定性问题,且与Python 3.6.8兼容。
建议在Jenkins任务中添加-vvv参数启用Ansible详细日志,捕获WinRM交互细节,便于精准定位失败环节。
内容的提问来源于stack exchange,提问作者gjvignesh
相关产品推荐
相关产品推荐

