Ansible通过CredSSP连接Windows报502错误,求排查指引
排查Ansible连接Windows时的CredSSP 502错误
针对你遇到的credssp: Bad HTTP response returned from server. Code 502连接错误,可按以下方向逐步排查:
1. 匹配传输协议与WinRM监听配置
你的Ansible配置使用credssp传输,但Windows客户端显示HTTP: Enabled | HTTPS: Disabled,而CredSSP默认依赖HTTPS(5986端口),协议不匹配是常见诱因:
- 先确认Windows是否开启CredSSP支持:
输出需包含“服务器已配置为允许接收凭据”的提示。Get-WSManCredSSP - 若坚持使用HTTP,需额外配置WinRM允许CredSSP在HTTP上运行:
同时在Ansible变量中明确指定HTTP端口:Set-Item WSMan:\localhost\Service\Auth\CredSSP -Value $true Set-Item WSMan:\localhost\Client\Auth\CredSSP -Value $true Enable-WSManCredSSP -Role Server -Forceansible_winrm_port: 5985
2. 检查Linux端CredSSP依赖
Ansible使用CredSSP传输需要安装credssp Python库,确认依赖是否存在:
# 用pip安装 pip3 install credssp # 或系统包管理器(根据发行版选择) apt install python3-credssp # Debian/Ubuntu系列 dnf install python3-credssp # RHEL/CentOS/Rocky系列
3. 排查网络层面的502拦截
502错误通常与网关/代理/防火墙拦截有关:
- 测试Linux到Windows的WinRM端口连通性:
nc -zv <hostname> 5985 # HTTP端口 nc -zv <hostname> 5986 # HTTPS端口 - 确认Windows防火墙规则是否正确允许外部访问:
Get-NetFirewallRule -Name "WINRM-HTTP-In-TCP", "WINRM-HTTPS-In-TCP" | Select-Object Name, Enabled - 排除代理影响:临时清空代理环境变量后重试连接:
unset http_proxy https_proxy ansible <hostname> -m win_ping
4. 切换传输协议验证基础连接
暂时改用basic传输,排除CredSSP本身的问题:
修改Ansible变量:
ansible_winrm_transport: basic
运行ansible <hostname> -m win_ping测试,若成功则聚焦CredSSP配置;若失败则排查WinRM基础连接问题。
5. 查看WinRM详细日志定位错误
开启Windows WinRM verbose日志,获取具体错误信息:
Set-Item WSMan:\localhost\Service\Logging\Enabled -Value $true Set-Item WSMan:\localhost\Service\Logging\LogLevel -Value Verbose
触发Ansible连接后,查看日志文件C:\Windows\System32\winevt\Logs\Microsoft-Windows-WinRM%4Operational.evtx,筛选相关错误条目分析。
内容的提问来源于stack exchange,提问作者vinWin
相关产品推荐
相关产品推荐

