Ansible Tower跨主机拷贝文件 双端凭证不同任务失败问题咨询
Ansible Tower跨主机双凭证文件拷贝解决方案
问题场景
使用Ansible Tower执行跨机器文件拷贝任务时,源主机MachineA与目标主机MachineB使用独立的SSH访问凭证,Tower单任务默认无法同时绑定两套主机凭证,导致原synchronize任务执行失败,原playbook配置如下:
- name: copy file from A to B synchronize: src: /tmp/file.txt dest: /tmp_folder/ mode: push delegate_to: machineA
可行解决方法
- 中转拷贝法(最适配Tower原生逻辑,无额外主机配置)
拆分拷贝动作为两个独立步骤,利用Tower执行节点作为中转:- 任务第一阶段绑定MachineA的访问凭证,将MachineA上的
/tmp/file.txt通过fetch模块拉取到Tower执行节点的临时目录 - 任务第二阶段绑定MachineB的访问凭证,将执行节点临时目录内的文件通过
copy模块推送到MachineB的/tmp_folder/路径 - 可选增加清理步骤,删除执行节点上的临时中转文件
参考playbook片段:
- name: pull source file from MachineA to Tower temp dir fetch: src: /tmp/file.txt dest: /tmp/ansible_transfer_cache/ flat: yes hosts: machineA - name: push cached file to MachineB target path copy: src: /tmp/ansible_transfer_cache/file.txt dest: /tmp_folder/ hosts: machineB - name: clean temp transfer file on Tower file: path: /tmp/ansible_transfer_cache/file.txt state: absent run_once: yes delegate_to: localhost - 任务第一阶段绑定MachineA的访问凭证,将MachineA上的
- 源主机免密授权法(原playbook无需改动)
提前配置MachineA到MachineB的SSH免密信任:在MachineA上生成SSH密钥对,将公钥写入MachineB对应用户的~/.ssh/authorized_keys列表,保证MachineA上的执行用户可以直接免密连接MachineB。配置完成后Tower侧只需要给任务绑定MachineA的访问凭证,原有delegate_to逻辑的synchronize任务即可正常执行,不需要额外传参。 - 显式传参注入凭证法(保留synchronize增量同步特性)
在Tower中创建自定义凭证类型,将MachineB的SSH私钥、连接用户名配置为敏感加密变量,任务执行时将凭证动态注入到MachineA的临时路径下,再通过synchronize模块的rsync_opts参数指定SSH认证信息完成跨机拷贝。参考配置片段:
注意:临时注入到MachineA的私钥需要在任务结束后自动删除,避免凭证残留。- name: sync file from A to B with injected credential synchronize: src: /tmp/file.txt dest: /tmp_folder/ mode: push rsync_opts: - "-e 'ssh -i {{ temp_machineb_key_path }} -o StrictHostKeyChecking=no'" delegate_to: machineA
内容的提问来源于stack exchange,提问作者raquel666
相关产品推荐
相关产品推荐

