如何通过ansible通信两台远程机器

时间:2015-08-05 04:36:45

标签: ansible

我正在从系统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

1 个答案:

答案 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登录不是最好的主意,但这是另一个主题。 :)