我正在从系统1运行ansible playbook,它在系统2上运行任务以进行备份,之后,我想将备份文件从系统2复制到系统3。
我正在执行此任务以自动执行以下命令 where / bck1 / test on system 2和opt / backup on system 3
rsync -r -v -e ssh /bck1/test.* root@host3:/opt/backup
答案 0 :(得分:0)
您可以使用shell
模块运行raw rsync命令。
tasks:
- shell: rsync -r -v -e ssh /bck1/test.* root@host3:/opt/backup
要实现此目的,您需要将私有ssh密钥部署到系统2,或者,首选启用ssh代理转发,例如在.ssh/config
中:
Host host2
ForwardAgent yes
此外,系统2上的sshd需要接受代理转发。以下是我用来执行此操作的一些任务:
- name: Ensure sshd allows agent forwarding
lineinfile: dest=/etc/ssh/sshd_config
regexp=^#?AllowAgentForwarding
line="AllowAgentForwarding yes"
follow=yes
backup=yes
sudo: yes
register: changed_sshd_config
- name: "Debian: Restart sshd"
shell: invoke-rc.d ssh restart
sudo: yes
when:
- ansible_distribution in [ "Debian", "Ubuntu" ]
- changed_sshd_config | changed
- name: "CentOS 7: Restart sshd"
shell: systemctl restart sshd.service
sudo: yes
when:
- ansible_distribution == "CentOS"
- ansible_distribution_major_version == "7"
- changed_sshd_config | changed
在Debian和CentOS7上重启sshd有两个单独的任务。选择你需要的东西,或者你必须适应你的系统。
您可能需要在单独的剧本中进行配置。因为Ansible将保持与主机的开放ssh连接,并且在激活代理转发后,您很可能需要重新连接。
PS:允许用户root的ssh登录不是最好的主意,但这是另一个主题。 :)