假设在host1上运行ansible,如何将文件从host2复制到host3

时间:2015-08-13 06:51:51

标签: ansible

我在host1上安装了ansible。 host2上有文件我需要通过ansible在host3上复制。我正在使用RHEL。

我在host2上运行了yml,但它在复制文件任务中停滞不前。

- 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: "RHEL: Restart sshd"
  shell: /etc/init.d/sshd restart
  sudo: yes
  when:
    - changed_sshd_config | changed

- name: Copy file from host2 to host3
  shell: rsync -r -v -e ssh /root/samplefile.gz root@host3:/root

任何人都可以解释一下这里缺少什么。如果可以,请提供详细步骤,提及正确的主机。

1 个答案:

答案 0 :(得分:1)

最有可能的问题是你无法从host2登录到host3而且Ansible挂起了这个任务,因为rsync正在等你输入ssh密码。您是否能够从host2手动登录到host3?

我之前在How communicate two remote machine through ansible回答了同样的问题(由于没有接受答案,因此无法标记为重复...)

以下是链接答案的略微修改版本。这些任务是为CentOS编写的,因此它应该适用于RHEL。

要使其正常工作,您需要将私有ssh密钥部署到host2,或者首选启用ssh代理转发,例如在.ssh/config中:

Host host2
    ForwardAgent yes

此外,host2上的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: "Restart sshd"
  shell: systemctl restart sshd.service
  sudo: yes
  when: changed_sshd_config | changed

您可能需要在单独的剧本中进行配置。因为Ansible可能会保持与主机的开放ssh连接,并且在激活代理转发后,您可能需要重新连接。