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

如何使用Ansible在Windows与Linux主机间复制文件?

问题描述

基础设施

  • Ansible清单中的Windows主机win_host,运行Win Server 2022系统
  • 存有需复制文件的Linux主机lin_host
  • 在独立Linux主机awx_host的Kubernetes AWX容器中运行的Ansible

需求

  1. 将主机lin_host添加到剧本中(已实现)
  2. 从lin_host向win_host复制文件(操作失败)

尝试过的任务变体

- name: Fetch file to the destination host
  ansible.builtin.copy:
    src: /tmp/another.txt
    dest: C:/
    remote_src: yes
  when: inventory_hostname == 'win_host'
  delegate_to: lin_host

已尝试的调整操作

  • 委托至不同主机
  • 使用copy/fetch/win_copy模块
  • 设置远程/本地源参数
  • 配置不同的when主机条件

始终无法找到正确的参数组合,请问该如何实现此功能,或者该操作是否可行?


解决方案

这个操作是可行的,核心问题是你之前的写法混淆了执行上下文,以下是两种可靠的实现方式:

方式一:利用控制节点中转(最稳妥,无需额外配置)

先把lin_host上的文件拉取到AWX容器(控制节点),再推送到win_host:

# 第一步:从lin_host拉取文件到控制节点临时目录
- name: Pull file from lin_host to controller
  ansible.builtin.fetch:
    src: /tmp/another.txt
    dest: /tmp/
    flat: yes
  delegate_to: lin_host

# 第二步:将控制节点的文件推送到win_host
- name: Push file to win_host
  ansible.windows.win_copy:
    src: /tmp/another.txt
    dest: C:\
  delegate_to: win_host

方式二:直接跨主机传输(需额外配置互信)

如果不想通过控制节点中转,可以让lin_host直接连接win_host传输文件,但需要在lin_host上配置好WinRM客户端并能访问win_host,写法如下:

- name: Direct copy from lin_host to win_host
  ansible.windows.win_copy:
    src: /tmp/another.txt
    dest: C:\
    remote_src: no
  delegate_to: win_host
  vars:
    ansible_connection: ssh
    ansible_host: lin_host

注:这种方式需要确保win_host的Ansible变量可临时切换为SSH连接到lin_host,且lin_host能访问win_host的WinRM服务,配置成本较高,一般优先推荐第一种方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:22:15