Ansible Tower连接Windows服务器出现403错误排查求助
Ansible Tower连接Windows服务器WinRM 403错误排查指引
问题描述
执行Ansible Tower Playbook时,首个*收集事实(gathering facts)*任务失败,返回403错误:
basic: Bad HTTP response returned from server. Code 403
已确认信息:
- Tower到目标Windows服务器的5985、5986端口连通,ping正常
- 目标WinRM客户端/服务端配置已尽可能开放(配置见下文)
- 尝试过5985/5986端口,
ansible_winrm_transport设为ntlm/basic,均返回403 - 目标机器同网段其他软件可通过wsman正常连接
- 跨网络环境,目标机器无限制WinRM的组策略
目标WinRM配置
客户端配置
Client NetworkDelayms = 5000 URLPrefix = wsman AllowUnencrypted = true Auth Basic = true Digest = true Kerberos = true Negotiate = true Certificate = true CredSSP = true DefaultPorts HTTP = 5985 HTTPS = 5986 TrustedHosts = *
服务端配置
Service RootSDDL = O:NSG:BAD:P(A;;GA;;;BA)(A;;GR;;;IU)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD) MaxConcurrentOperations = 4294967295 MaxConcurrentOperationsPerUser = 1500 EnumerationTimeoutms = 240000 MaxConnections = 300 MaxPacketRetrievalTimeSeconds = 120 AllowUnencrypted = true Auth Basic = true Kerberos = true Negotiate = true Certificate = true CredSSP = true CbtHardeningLevel = Relaxed DefaultPorts HTTP = 5985 HTTPS = 5986 IPv4Filter = * IPv6Filter = * EnableCompatibilityHttpListener = true EnableCompatibilityHttpsListener = false CertificateThumbprint AllowRemoteAccess = true
当前Tower主机变量配置
ipaddress: 1.1.1.1 ansible_host: 1.1.1.1 ostype: "windows" ansible_user: "user" ansible_password: "password" ansible_connection: "winrm" ansible_winrm_transport: "ntlm" ansible_port: 5986 ansible_winrm_server_cert_validation: "ignore"
排查步骤
1. 验证WinRM用户权限
- 确认
ansible_user属于Windows本地管理员组,或具备WinRM远程执行权限(可通过net localgroup administrators命令确认) - 若使用域用户,需确认用户已被授予远程管理权限,且域组策略未限制WinRM访问
2. 检查WinRM服务SDDL权限
当前服务端RootSDDL配置需确保允许远程用户访问:
- 执行
winrm get winrm/config/service,检查RootSDDL是否包含远程用户的权限条目 - 若权限配置存疑,可重置为默认SDDL:
(默认SDDL允许管理员和交互用户访问,非管理员用户需手动添加权限)winrm set winrm/config/service '@{RootSDDL="O:NSG:BAD:P(A;;GA;;;BA)(A;;GR;;;IU)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)"}'
3. 排查跨网络WinRM限制
由于Tower与目标机器跨网络,需确认:
- 中间防火墙/安全设备是否拦截WinRM的HTTP/HTTPS请求内容(而非仅端口),比如过滤WinRM的SOAP数据包
- 在Tower服务器上直接用
winrm命令测试连接,排除Tower模板配置问题:
若此命令也返回403,说明问题出在WinRM服务或网络层面,而非Tower配置# 测试HTTP(5985) winrm enumerate winrm/config/listener -r:http://1.1.1.1:5985 -u:user -p:password -auth:basic # 测试HTTPS(5986) winrm enumerate winrm/config/listener -r:https://1.1.1.1:5986 -u:user -p:password -auth:ntlm -skipcncheck
4. 检查WinRM侦听器配置
- 执行
winrm enumerate winrm/config/listener,确认侦听器已正确绑定到目标IP(或0.0.0.0),且启用了对应认证方式 - 若使用HTTPS,确认证书已正确绑定到侦听器(即使设置了证书验证忽略,证书本身需有效)
5. 验证用户认证方式兼容性
- 若使用
basic认证,需确保用户密码未过期、无复杂密码限制冲突 - 若使用
ntlm,可尝试添加变量强制启用NTLMv2:ansible_winrm_ntlm_v2: true
6. 检查Windows本地安全策略
- 打开
本地安全策略→本地策略→用户权限分配,确认用户具备从网络访问此计算机权限,且未被加入拒绝从网络访问此计算机列表
7. 查看WinRM详细日志
- 打开Windows事件查看器 →
应用程序和服务日志→Microsoft→Windows→WinRM→Operational,查找403错误对应的日志条目,确认具体拒绝原因(如权限不足、认证方式不允许等)
内容的提问来源于stack exchange,提问作者Dániel Kőcs
相关产品推荐
相关产品推荐

