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

Ansible远程到远程复制文件:无需rsync守护进程的替代方案咨询

不用rsync守护进程也能直接跨主机同步文件的最优方案

嘿,你之前对synchronize模块的顾虑其实是个小误解——它默认是通过SSH协议同步文件的,完全不需要启动rsync守护进程!这刚好能满足你的需求:不需要把文件先拉到Ansible控制端,直接从ubuntu1同步到ubuntu2/3/4。

方案一:用synchronize模块(推荐)

这是最符合Ansible最佳实践的方法,配置简单且高效。你只需要在playbook里把同步任务委托给ubuntu1执行,就能直接把文件推送到目标主机:

- name: Sync /etc/resolv.conf from ubuntu1 to target hosts
  hosts: ubuntu2,ubuntu3,ubuntu4
  become: yes  # 因为/etc/resolv.conf需要root权限修改
  tasks:
    - name: Copy resolv.conf from ubuntu1 to current host
      ansible.builtin.synchronize:
        src: /etc/resolv.conf  # ubuntu1上的源文件路径
        dest: /etc/resolv.conf  # 目标主机上的目标路径
      delegate_to: ubuntu1  # 让这个任务在ubuntu1上执行

为什么这个可行?

当你设置delegate_to: ubuntu1后,synchronize会从ubuntu1发起SSH连接到目标主机(ubuntu2/3/4),直接把文件传过去,全程不需要rsync守护进程,完全依赖已有的SSH信任关系(只要你的Ansible控制机能管理所有主机,通常这个信任已经配置好了)。

方案二:用scp命令(备选)

如果你实在不想用synchronize模块,也可以直接在目标主机上执行scp命令拉取ubuntu1的文件,前提是ubuntu2/3/4能免密SSH访问ubuntu1:

- name: Fetch resolv.conf from ubuntu1 via scp
  hosts: ubuntu2,ubuntu3,ubuntu4
  become: yes
  tasks:
    - name: Run scp to copy file
      ansible.builtin.shell: scp ubuntu1:/etc/resolv.conf /etc/resolv.conf

不过这个方法的缺点是:scp不会像synchronize那样做增量同步(当然对于单个小文件来说影响不大),而且需要确保主机间的SSH密钥已经配置好免密登录。

注意事项

  • 不管用哪种方法,都需要become: yes,因为/etc/resolv.conf是系统文件,普通用户没有写入权限。
  • 确保ubuntu1和目标主机之间的SSH信任已经配置(Ansible能管理这些主机的话,通常已经搞定了这一步)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:16:55