如何使用Ansible在Windows与Linux主机间复制文件?
问题描述
基础设施
- Ansible清单中的Windows主机
win_host,运行Win Server 2022系统 - 存有需复制文件的Linux主机
lin_host - 在独立Linux主机
awx_host的Kubernetes AWX容器中运行的Ansible
需求
- 将主机
lin_host添加到剧本中(已实现) - 从
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
相关产品推荐
相关产品推荐

