我在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
任何人都可以解释一下这里缺少什么。如果可以,请提供详细步骤,提及正确的主机。
答案 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连接,并且在激活代理转发后,您可能需要重新连接。