Ansible WinRM连接Windows:管理员可用其他账号失败
问题描述
已在Windows机器上配置WinRM,执行命令如下:
New-SelfSignedCertificate -DnsName "EC2-KI33TN5" -CertStoreLocation Cert:\LocalMachine\My winrm create winrm/config/Listener?Address=*+Transport=HTTPS '@{Hostname="EC2-KI33TN5";CertificateThumbprint="9885C91EFSDFEWFSFWAWFEWFWEFFW61FEC661C5253"}'
自签名证书已添加至Windows根证书存储,Ansible Linux服务器可正常管理其他Linux节点。当前问题:使用默认管理员账号通过win_ping模块连接Windows机器正常,但使用**已加入管理员组的自定义账号ansibleadmin**连接失败,报错:
<10.10.10.245> ESTABLISH WINRM CONNECTION FOR USER: ansibleadmin on PORT 5986 TO 10.10.10.245 fatal: [WINDOWS_TEST]: UNREACHABLE! => { "changed": false, "msg": "ntlm: the specified credentials were rejected by the server", "unreachable": true }
WinRM监听器已验证正常运行:
PS C:\Windows\system32> WinRM e winrm/config/listener Listener Address = * Transport = HTTP Port = 5985 Hostname Enabled = true URLPrefix = wsman CertificateThumbprint ListeningOn = 10.10.10.245, 127.0.0.1, ::1, 2001:0:34f1:8072:34f7:a78:f5f5:f508, fe80::5efe:10.10.10.245%7, fe80::34 f7:a78:f5f5:f508%8, fe80::dca2:59f6:8dd1:e2d0%6 Listener Address = * Transport = HTTPS Port = 5986 Hostname = EC2-KI33TN5 Enabled = true URLPrefix = wsman CertificateThumbprint = 9885C91EFSDFEWFSFWAWFEWFWEFFW61FEC661C5253 ListeningOn = 10.10.10.245, 127.0.0.1, ::1, 2001:0:34f1:8072:34f7:a78:f5f5:f508, fe80::5efe:10.10.10.245%7, fe80::34 f7:a78:f5f5:f508%8, fe80::dca2:59f6:8dd1:e2d0%6
排查与解决方案
1. 检查自定义账号的本地安全策略权限
WinRM需要账号拥有特定远程登录权限,即使在管理员组也可能被默认策略限制:
- 打开
本地安全策略(secpol.msc) - 进入
本地策略>用户权限分配 - 确认
允许通过远程桌面服务登录和从网络访问此计算机列表中包含ansibleadmin账号或其所在的管理员组 - 若未添加,补充后重启WinRM服务:
Restart-Service WinRM -Force
2. 验证WinRM的NTLM认证配置
确保WinRM允许NTLM认证,无针对自定义账号的限制:
- 执行命令检查WinRM认证配置:
winrm get winrm/config/service/auth - 确保输出中
NTLM = true,若为false,执行:winrm set winrm/config/service/auth @{NTLM="true"}
3. 检查账号密码策略与状态
- 确认
ansibleadmin账号未过期、未被锁定,密码符合本地复杂度要求 - 尝试在Windows本地用该账号登录,验证密码正确性与账号状态
- 域环境需额外检查域账号的权限与策略(非域机器可忽略)
4. 配置WinRM允许非内置管理员账号访问
默认WinRM可能限制非内置管理员账号的访问,需显式配置:
- 执行命令将账号加入远程管理用户组:
net localgroup "Remote Management Users" ansibleadmin /add - 重启WinRM服务:
Restart-Service WinRM -Force
5. 检查Ansible配置中的认证参数
确保Ansible inventory或playbook的Windows节点配置正确:
[WINDOWS_TEST] 10.10.10.245 [WINDOWS_TEST:vars] ansible_user=ansibleadmin ansible_password=YourPassword ansible_connection=winrm ansible_winrm_transport=ntlm ansible_winrm_server_cert_validation=ignore # 自签名证书需忽略验证
注:域账号需添加ansible_domain=YOURDOMAIN配置,本地账号无需此参数。
6. 本地测试WinRM连接
在Windows机器上用ansibleadmin账号本地测试WinRM,定位问题节点:
$cred = Get-Credential ansibleadmin Invoke-Command -ComputerName localhost -Credential $cred -ScriptBlock { Get-ChildItem C:\ }
若本地测试失败,问题出在Windows账号或权限配置;若本地成功,再排查Ansible端的网络与配置细节。
内容的提问来源于stack exchange,提问作者KNCK
相关产品推荐
相关产品推荐

