无法通过Ansible ping通节点:WSL连接Windows主机失败
问题详情
我正在学习Ansible教程,在WSL中安装了Ansible,已将Windows主机IP添加到/etc/ansible/hosts文件中,执行命令ansible windows -m ping后得到以下错误:
192.168.29.1 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.29.1 port 22: Connection timed out",
"unreachable": true
}
期望得到的成功结果:
192.168.29.1 | SUCCESS! => {
"ansible_facts":{
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": pong
}
问题原因
Ansible默认通过SSH协议连接目标主机,但Windows系统默认未开启SSH服务,且Ansible管理Windows主机需要使用WinRM协议而非SSH。
解决步骤
1. 在Windows主机上配置WinRM服务
以管理员身份打开PowerShell,依次执行以下命令:
# 设置WinRM服务为自动启动并启动服务 Set-Service -Name WinRM -StartupType Automatic Start-Service WinRM # 快速配置WinRM监听 winrm quickconfig -quiet # 启用基本认证(测试环境临时配置) winrm set winrm/config/service/auth '@{Basic="true"}' # 允许非加密连接(测试环境临时配置) winrm set winrm/config/service '@{AllowUnencrypted="true"}'
注意:生产环境请使用更安全的认证方式(如NTLM),避免开启非加密连接。
2. 修改Ansible主机清单配置
编辑/etc/ansible/hosts文件,为Windows主机组添加WinRM相关参数:
[windows] 192.168.29.1 [windows:vars] ansible_connection=winrm ansible_winrm_transport=basic ansible_winrm_server_cert_validation=ignore ansible_user=你的Windows登录用户名 ansible_password=你的Windows登录密码
将上述配置中的用户名和密码替换为Windows主机的实际登录信息。
3. 使用正确的模块执行ping测试
Windows主机需要使用win_ping模块而非默认的ping模块,执行以下命令:
ansible windows -m win_ping
执行成功后即可得到类似期望结果的返回。
内容的提问来源于stack exchange,提问作者user21835494

