You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible从Linux主机委托任务至Windows主机失败问题排查

问题根源

你遇到的连接失败,是因为Ansible默认沿用了Linux控制节点的SSH连接方式去访问Windows主机,但Windows主机需要通过WinRM协议连接,而非SSH,所以直接使用delegate_to会导致连接方式不匹配。

解决步骤

1. 配置Windows主机的WinRM连接参数

在Ansible的inventory文件(如hosts)中,为windowsVM添加WinRM专属连接变量,明确告诉Ansible用WinRM协议连接它:

[windows]
windowsVM ansible_host=你的Windows主机IP ansible_connection=winrm ansible_winrm_transport=ntlm ansible_winrm_server_cert_validation=ignore ansible_user=Windows管理员账号 ansible_password=对应密码

参数说明:

  • ansible_connection=winrm:指定用WinRM协议连接
  • ansible_winrm_transport=ntlm:常用的Windows认证方式,可根据你的环境调整
  • ansible_winrm_server_cert_validation=ignore:如果Windows用的是自签名证书,关闭证书验证避免报错
  • ansible_user/ansible_password:Windows主机的登录凭据

2. 调整Playbook任务

你的uri任务逻辑没问题,但需要确保委托时使用正确的连接规则。如果inventory已经配置好参数,直接保留delegate_to即可;也可以在任务中临时指定连接变量(适合临时测试场景):

- name: Send a notification to MS Teams
  uri:
    url: "https://abcd.webhook.office.com/webhookb2/xyz"
    method: POST
    body:
      title: "Test Title"
      text: "Test text"
    body_format: json  # Teams WebHook要求JSON格式请求体,必须添加这个参数
  delegate_to: windowsVM
  # 若未在inventory配置,可在此临时指定WinRM参数
  vars:
    ansible_connection: winrm
    ansible_winrm_transport: ntlm
    ansible_winrm_server_cert_validation: ignore
    ansible_user: Windows管理员账号
    ansible_password:对应密码

3. 验证WinRM连接有效性

先单独测试Windows主机的连通性,确保WinRM配置正常:

ansible windowsVM -m win_ping

返回pong则说明连接正常,此时再运行Playbook就不会出现SSH连接失败的问题。

提示:明文密码不安全,建议用ansible-vault加密密码,或通过环境变量、密钥管理工具传递凭据。

内容的提问来源于stack exchange,提问作者suj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 16:13:41