You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 00:05:16