在 Linux 的 Ansible 清单中管理 Windows 主机需配置 WinRM 专用变量:ansible_connection=winrm、ansible_user/password、ansible_port、ansible_winrm_transport、ansible_winrm_server_cert_validation 和 ansible_winrm_scheme;禁用 SSH 相关变量;通过 win_ping 模块验证连通性。

在 Linux 的 Ansible 清单(inventory)中管理 Windows 主机,核心是明确指定 WinRM 连接方式、认证参数和传输协议,不能沿用 Linux 的 SSH 配置逻辑。关键不在“加一台主机”,而在“告诉 Ansible 怎么和 Windows 说话”。
清单中必须设置的 Windows 专用变量
Windows 主机不能只写 IP 或主机名,需在同一组或主机行后,通过 [group:vars] 或主机级变量定义以下必需项:
- ansible_connection=winrm:强制使用 WinRM 协议,而非默认的 ssh
- ansible_user 和 ansible_password(或 ansible_winrm_kerberos_delegation):明文密码适用于测试环境;生产建议用 vault 加密或 Kerberos
- ansible_port:HTTP 默认 5985,HTTPS 默认 5986;务必与 Windows 端实际监听端口一致
-
ansible_winrm_transport:常用
ntlm(域或本地账户)、negotiate(Kerberos)、credssp(需额外启用) -
ansible_winrm_server_cert_validation:内网自签名证书时设为
ignore;若用可信 CA 证书,可设为validate -
ansible_winrm_scheme:显式指定
http或https,避免协议猜测出错
典型 inventory 写法示例
假设 Windows 主机 IP 是 192.168.10.50,已配置 WinRM 监听 5985(HTTP + NTLM),管理员密码为 P@ssw0rd:
直播话术巡检系统(Windows版) — 实时语音转写、关键词检测、场景自动切换、告警推送、大屏可视化。支持 Windows VB-Cable 虚拟声卡音频采集,阿里云 ASR 实时识别。一键启动脚本,自动安装环境。
[windows] 192.168.10.50 [windows:vars] ansible_connection=winrm ansible_user=Administrator ansible_password=P@ssw0rd ansible_port=5985 ansible_winrm_transport=ntlm ansible_winrm_server_cert_validation=ignore ansible_winrm_scheme=http
若改用 HTTPS(5986),只需把 port、scheme 改为 5986 和 https,并确保 Windows 已绑定有效证书。
避免常见配置陷阱
- 不要混用
ansible_ssh_*前缀变量(如ansible_ssh_pass)——对 Windows 无效,Ansible 会静默忽略 - 不要省略
ansible_winrm_transport:不设时默认为negotiate,但多数非域环境无法成功,直接报Authentication failed - 组变量优先级高于主机变量,但主机变量可覆盖组变量;调试时建议先用主机级变量写死,确认通了再抽象成组
- 若使用 ansible-vault 加密密码,变量值应为
!vault | ...格式,且运行时需提供 vault 密码
验证连接是否就绪
配置完 inventory 后,立即执行基础连通性测试:
ansible windows -m win_ping -i inventory.ini
返回 "ping": "pong" 表示 WinRM 层通信正常;若失败,错误信息通常指向具体环节:
– Connection timed out → 检查 Windows 防火墙、WinRM 是否启动、端口是否监听
– Authentication failure → 检查用户名密码、transport 类型、是否启用了对应认证方式
– Certificate validation failed → 检查 server_cert_validation 设置或证书是否受信

















