Ansible playbook在Windows域及工作组主机执行异常问题求助
问题根因
你遇到的Ansible默认走SSH连接的问题,核心是连接类变量未被正确加载,常见原因包括:
- 运行playbook时未正确加载修改后的清单文件
- ini格式清单内的组变量存在格式错误(如行首空格、变量名拼写错误)
- 存在其他更高优先级的变量覆盖了
ansible_connection配置
解决方案
方案1:优化现有ini清单配置
将公共WinRM配置抽离为父组变量,减少重复配置同时避免格式错误:
修改common_inventory内容如下:
[win_domain] 10.1.2.3 10.1.2.4 [win_workgroup] 10.1.2.5 10.1.2.6 # 配置父组统一管理Windows主机通用连接参数 [windows:children] win_domain win_workgroup [windows:vars] ansible_connection: winrm ansible_winrm_transport: credssp ansible_port: '5986' ansible_winrm_scheme: 'https' ansible_winrm_server_cert_validation: 'ignore' ansible_winrm_operation_timeout_sec: 60 ansible_winrm_read_timeout_sec: 70 [win_domain:vars] ansible_user: 'WINDOMAIN\ansmgmt' ansible_password: 'Ansa123!' [win_workgroup:vars] ansible_user: 'ansalocal' ansible_password: 'Welcome!1'
配置完成后先执行命令验证变量是否正确加载:ansible-inventory -i common_inventory --list --vars
确认输出中两组主机的ansible_connection值为winrm后再运行playbook,若ansible.cfg中已配置inventory = ./common_inventory,可省略-i参数。
方案2:使用group_vars目录管理变量(更易维护)
在playbooks根目录新建group_vars目录,按分组拆分变量文件,目录结构如下:
playbooks/ ├── group_vars/ │ ├── windows/ │ │ └── main.yml # 存放所有Windows主机通用WinRM配置 │ ├── win_domain/ │ │ └── main.yml # 存放域主机专属账号配置 │ └── win_workgroup/ │ └── main.yml # 存放工作组主机专属账号配置 ├── ansible.cfg ├── common_inventory ├── servers.yml └── roles/
各文件内容如下:group_vars/windows/main.yml:
ansible_connection: winrm ansible_winrm_transport: credssp ansible_port: '5986' ansible_winrm_scheme: 'https' ansible_winrm_server_cert_validation: 'ignore' ansible_winrm_operation_timeout_sec: 60 ansible_winrm_read_timeout_sec: 70
group_vars/win_domain/main.yml:
ansible_user: 'WINDOMAIN\ansmgmt' ansible_password: 'Ansa123!'
group_vars/win_workgroup/main.yml:
ansible_user: 'ansalocal' ansible_password: 'Welcome!1'
common_inventory仅保留主机分组配置即可:
[win_domain] 10.1.2.3 10.1.2.4 [win_workgroup] 10.1.2.5 10.1.2.6 [windows:children] win_domain win_workgroup
该方案变量加载优先级更高,后续调整连接参数或账号信息更清晰,无需修改清单文件。
排障提示
如果仍然出现SSH连接报错,运行playbook时添加-vvv参数,查看ansible_connection变量的加载来源,排查是否有全局变量、host_vars文件或其他角色变量覆盖了该配置。
内容的提问来源于stack exchange,提问作者Kelvin A. Vasquez
相关产品推荐
相关产品推荐

