Ansible管理Windows主机时出现MODULE FAILURE错误求助
Ansible管理Windows主机时setup模块执行失败排查
问题详情
执行Ansible playbook管理Windows主机时触发模块执行失败,报错信息如下:
fatal: [XXXXXXX.DOMAIN.COM]: FAILED! => {"ansible_facts": {}, "changed": false, "failed_modules": {"ansible.legacy.setup": {"failed": true, "module_stderr": "", "module_stdout": "", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}}, "msg": "The following modules failed to execute: ansible.legacy.setup\n"}
当前使用的Ansible变量配置:
ansible_user: admin@DOMAIN.COM ansible_password: Password ansible_connection: winrm ansible_winrm_transport: kerberos ansible_winrm_server_cert_validation: ignore ansible_winrm_port: 5986
已完成前置检查:WinRM HTTPS监听器已配置,5986端口的防火墙入站规则已启用。
排查步骤
1. 开启WinRM调试日志获取详细错误
在目标Windows主机上执行PowerShell命令开启WinRM verbose级别的调试日志:
winrm set winrm/config/service @{TraceEnabled="true"} winrm set winrm/config/service @{TraceLevel="verbose"}
重新执行Ansible playbook后,通过Windows事件查看器查看日志:
事件查看器 → 应用程序和服务日志 → Microsoft → Windows → WinRM → Operational
2. 验证Kerberos认证链路
从Ansible控制节点执行Kerberos票据获取测试:
kinit admin@DOMAIN.COM # 输入密码后查看票据状态 klist
若票据获取失败,检查以下项:
- 控制节点是否已配置正确的Kerberos客户端配置(/etc/krb5.conf),或已加入域
- 目标Windows主机是否已注册正确的SPN:执行
setspn -L XXXXXXX.DOMAIN.COM,需存在WSMAN/XXXXXXX.DOMAIN.COM和WSMAN/XXXXXXX记录 - 用户名格式是否符合Kerberos要求(
user@DOMAIN.COM格式)
3. 直接测试WinRM连通性
从控制节点用winrm命令直接发起连接测试,绕过Ansible模块层:
winrm identify -r https://XXXXXXX.DOMAIN.COM:5986 -u admin@DOMAIN.COM -p Password -auth:kerberos -skipcncheck
根据返回的具体错误信息定位问题(如认证失败、证书问题等)。
4. 检查控制节点WinRM依赖
确保控制节点已安装Kerberos相关的WinRM依赖包:
pip install pywinrm pywinrm[kerberos]
5. 切换传输方式排除Kerberos问题
临时修改Ansible变量,将WinRM传输方式改为ntlm,执行playbook测试是否能正常运行:
ansible_winrm_transport: ntlm
内容的提问来源于stack exchange,提问作者Onyx
相关产品推荐
相关产品推荐

