Ansible连接Windows报错winrm连接插件未找到问题排查
问题根因
该报错与pywinrm模块安装状态、5985/5986端口连通性、Windows端WinRM服务配置均无关系,核心诱因是ansible_connection连接参数配置错误:编写主机清单(inventory)或相关变量文件时,将针对winrm连接的说明注释写在了参数值的同一行,Ansible解析时把## The kind of connection which ansible will make with remote windows node这段注释内容当成了连接插件名的一部分,尝试查找名为winrm ## The kind of connection which ansible will make with remote windows node的不存在的插件,最终触发报错。
这个问题通常出现在使用ini格式编写inventory的场景:Ansible的ini格式inventory不会自动识别参数值同一行内#开头的内容为注释,行内#及后续字符会被直接识别为参数值的一部分。
排查验证方法
执行以下命令查看目标主机实际加载的变量值,可直接确认ansible_connection字段是否包含多余的注释字符串:
ansible-inventory --host 10.10.X.X
解决方案
- 修正inventory配置中的
ansible_connection参数:- 若使用ini格式编写inventory,禁止在参数行的同一行尾随注释,所有注释需要单独占行,在行首加
#标识。 - 错误配置示例:
[windows_hosts] 10.10.X.X ansible_user=admin ansible_password=yourpass ansible_connection=winrm ## The kind of connection which ansible will make with remote windows node ansible_port=5985 ansible_winrm_server_cert_validation=ignore - 正确配置示例(ini格式):
[windows_hosts] ## The kind of connection which ansible will make with remote windows node 10.10.X.X ansible_user=admin ansible_password=yourpass ansible_connection=winrm ansible_port=5985 ansible_winrm_server_cert_validation=ignore - 若使用YAML格式编写inventory/vars文件,只要保证注释写在单独行、
ansible_connection的取值仅为winrm即可,YAML语法会自动识别行首的#为注释标记,不会出现参数值拼接问题,参考配置:windows_hosts: hosts: 10.10.X.X: ansible_user: admin ansible_password: yourpass # The kind of connection which ansible will make with remote windows node ansible_connection: winrm ansible_port: 5985 ansible_winrm_server_cert_validation: ignore
- 若使用ini格式编写inventory,禁止在参数行的同一行尾随注释,所有注释需要单独占行,在行首加
- 配置修正后,执行以下命令验证连通性即可,无需重装pywinrm或调整Windows端WinRM配置:
ansible 10.10.X.X -m win_ping
内容的提问来源于stack exchange,提问作者ssethi
相关产品推荐
相关产品推荐

