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

使用Ansible Synchronize模块在远程CentOS-7主机复制文件的问题

刚好我之前也处理过类似的需求,给你几个靠谱的解决方案,帮你实现远程主机内部的文件/目录复制:

首先先确认下你的inventory配置没问题,centos-server的参数设置是符合要求的,接下来看具体实现方式:

方法1:用synchronize模块(推荐,适合复杂场景)

你说的没错,copy模块确实只能从本地推送到远程,而synchronize模块基于rsync,不仅能跨主机同步,还能通过任务委派实现远程主机内部的复制。

下面是完整的Playbook示例:

- name: 远程主机内部文件/目录复制任务
  hosts: centos-server
  tasks:
    # 先确保远程主机安装了rsync(CentOS7默认有,保险起见加这步)
    - name: 安装rsync(若未安装)
      yum:
        name: rsync
        state: present

    # 创建目标目录(如果目标路径不存在的话)
    - name: 创建目标目录
      file:
        path: /opt/target_dir/
        state: directory
        mode: '0755'

    # 核心:远程主机内部同步文件/目录
    - name: 同步远程主机内的文件/目录
      ansible.posix.synchronize:
        src: /opt/source_file_or_dir/
        dest: /opt/target_dir/
      delegate_to: "{{ inventory_hostname }}"

关键说明:

  • delegate_to: "{{ inventory_hostname }}":把这个任务委派到远程主机本身执行,这样src和dest都是远程主机上的路径,rsync就会在远程主机内部完成复制
  • src末尾的斜杠:如果src是目录,加斜杠会把目录内的内容同步到dest;不加斜杠会把整个源目录同步到dest下(和rsync原生行为一致)
  • 这个方法支持增量同步、权限保留、递归复制目录,适合复杂的复制场景

方法2:用command/shell模块(简单场景快速实现)

如果只是复制单个文件,或者需求很简单,直接用cp命令更省事:

- name: 远程主机内部单个文件复制
  hosts: centos-server
  tasks:
    # 先确保目标目录存在
    - name: 创建目标目录
      file:
        path: /opt/target_dir/
        state: directory
        mode: '0755'

    - name: 执行cp命令复制文件
      command: cp /opt/source_file.txt /opt/target_dir/source_file.txt

这个方法更直接,但注意如果是复制目录需要加-r参数(cp -r /source_dir /dest_dir),而且没有增量同步的功能,适合简单场景。

小提示

  • 如果你需要复制后修改文件权限,可以在复制完成后用file模块调整
  • 测试的时候可以加上--check参数先模拟执行,确认没问题再正式运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:32:55