无法使用 ansible 同步模块远程复制到远程



我正在尝试将目录从服务器 a 复制到服务器 b。

这是我的文件:

测试.yml

- hosts: server-b  
tasks:
- name: Copy Remote-To-Remote (from server-a to server-b)
synchronize: src=/test-dir dest=/test-dir
delegate_to: server-a

主机.yml

all:
hosts:
server-a:
ansible_host: 123.123.123.101
ansible_user: root
server-b:
ansible_host: 123.123.123.102
ansible_user: root

安斯布尔.cfg

[defaults]
inventory = hosts.yml
host_key_checking = false

这是输出:

$ ansible-playbook test.yml
PLAY [server-b] *******************************************************************************************************************************
TASK [Gathering Facts] ****************************************************************************
********************************************
ok: [server-b]
TASK [Copy Remote-To-Remote (from server-a to server-b)] **************************************************************************************

因此,它挂起并且不会复制任何内容。

下面是一个详细的日志(带有 -vvvv(:

TASK [Copy Remote-To-Remote (from server-a to server-b)] **************************************************************************************
task path: /Users/max7z/projects/test/t11__ansible__copy_dir_from_server-a_to_server-b/test.yml:3
<server-a-ip> ESTABLISH SSH CONNECTION FOR USER: root
<server-a-ip> SSH: EXEC ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=root -o ConnectTimeout=10 -o ControlPath=/Users/max7z/.ansible/cp/9c5eb423c5 server-a-ip '/bin/sh -c '"'"'echo ~root && sleep 0'"'"''
<server-a-ip> (0, '/rootn', 'OpenSSH_7.6p1, LibreSSL 2.6.2rndebug1: Reading configuration data /Users/max7z/.ssh/configrndebug1: /Users/max7z/.ssh/config line 1: Applying options for *rndebug1: Reading configuration data /etc/ssh/ssh_configrndebug1: /etc/ssh/ssh_config line 48: Applying options for *rndebug1: auto-mux: Trying existing masterrndebug2: fd 3 setting O_NONBLOCKrndebug2: mux_client_hello_exchange: master version 4rndebug3: mux_client_forwards: request forwardings: 0 local, 0 remoterndebug3: mux_client_request_session: enteringrndebug3: mux_client_request_alive: enteringrndebug3: mux_client_request_alive: done pid = 64910rndebug3: mux_client_request_session: session request sentrndebug1: mux_client_request_session: master session id: 2rndebug3: mux_client_read_packet: read header failed: Broken piperndebug2: Received exit status from master 0rn')
<server-a-ip> ESTABLISH SSH CONNECTION FOR USER: root
<server-a-ip> SSH: EXEC ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=root -o ConnectTimeout=10 -o ControlPath=/Users/max7z/.ansible/cp/9c5eb423c5 server-a-ip '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo /root/.ansible/tmp/ansible-tmp-1530864809.51-156163648940516 `" && echo ansible-tmp-1530864809.51-156163648940516="` echo /root/.ansible/tmp/ansible-tmp-1530864809.51-156163648940516 `" ) && sleep 0'"'"''
<server-a-ip> (0, 'ansible-tmp-1530864809.51-156163648940516=/root/.ansible/tmp/ansible-tmp-1530864809.51-156163648940516n', 'OpenSSH_7.6p1, LibreSSL 2.6.2rndebug1: Reading configuration data /Users/max7z/.ssh/configrndebug1: /Users/max7z/.ssh/config line 1: Applying options for *rndebug1: Reading configuration data /etc/ssh/ssh_configrndebug1: /etc/ssh/ssh_config line 48: Applying options for *rndebug1: auto-mux: Trying existing masterrndebug2: fd 3 setting O_NONBLOCKrndebug2: mux_client_hello_exchange: master version 4rndebug3: mux_client_forwards: request forwardings: 0 local, 0 remoterndebug3: mux_client_request_session: enteringrndebug3: mux_client_request_alive: enteringrndebug3: mux_client_request_alive: done pid = 64910rndebug3: mux_client_request_session: session request sentrndebug1: mux_client_request_session: master session id: 2rndebug3: mux_client_read_packet: read header failed: Broken piperndebug2: Received exit status from master 0rn')
Using module file /usr/local/Cellar/ansible/2.6.0/libexec/lib/python2.7/site-packages/ansible/modules/files/synchronize.py
<server-a-ip> PUT /Users/max7z/.ansible/tmp/ansible-local-65309JwJs2q/tmpBWQj1p TO /root/.ansible/tmp/ansible-tmp-1530864809.51-156163648940516/synchronize.py
<server-a-ip> SSH: EXEC sftp -b - -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=root -o ConnectTimeout=10 -o ControlPath=/Users/max7z/.ansible/cp/9c5eb423c5 '[server-a-ip]'
<server-a-ip> (0, 'sftp> put /Users/max7z/.ansible/tmp/ansible-local-65309JwJs2q/tmpBWQj1p /root/.ansible/tmp/ansible-tmp-1530864809.51-156163648940516/synchronize.pyn', 'OpenSSH_7.6p1, LibreSSL 2.6.2rndebug1: Reading configuration data /Users/max7z/.ssh/configrndebug1: /Users/max7z/.ssh/config line 1: Applying options for *rndebug1: Reading configuration data /etc/ssh/ssh_configrndebug1: /etc/ssh/ssh_config line 48: Applying options for *rndebug1: auto-mux: Trying existing masterrndebug2: fd 3 setting O_NONBLOCKrndebug2: mux_client_hello_exchange: master version 4rndebug3: mux_client_forwards: request forwardings: 0 local, 0 remoterndebug3: mux_client_request_session: enteringrndebug3: mux_client_request_alive: enteringrndebug3: mux_client_request_alive: done pid = 64910rndebug3: mux_client_request_session: session request sentrndebug1: mux_client_request_session: master session id: 2rndebug2: Remote version: 3rndebug2: Server supports extension "posix-rename@openssh.com" revision 1rndebug2: Server supports extension "statvfs@openssh.com" revision 2rndebug2: Server supports extension "fstatvfs@openssh.com" revision 2rndebug2: Server supports extension "hardlink@openssh.com" revision 1rndebug2: Server supports extension "fsync@openssh.com" revision 1rndebug3: Sent message fd 8 T:16 I:1rndebug3: SSH_FXP_REALPATH . -> /root size 0rndebug3: Looking up /Users/max7z/.ansible/tmp/ansible-local-65309JwJs2q/tmpBWQj1prndebug3: Sent message fd 8 T:17 I:2rndebug3: Received stat reply T:101 I:2rndebug1: Couldn't stat remote file: No such file or directoryrndebug3: Sent message SSH2_FXP_OPEN I:3 P:/root/.ansible/tmp/ansible-tmp-1530864809.51-156163648940516/synchronize.pyrndebug3: Sent message SSH2_FXP_WRITE I:4 O:0 S:32768rndebug3: SSH2_FXP_STATUS 0rndebug3: In write loop, ack for 4 32768 bytes at 0rndebug3: Sent message SSH2_FXP_WRITE I:5 O:32768 S:32768rndebug3: Sent message SSH2_FXP_WRITE I:6 O:65536 S:6565rndebug3: SSH2_FXP_STATUS 0rndebug3: In write loop, ack for 5 32768 bytes at 32768rndebug3: SSH2_FXP_STATUS 0rndebug3: In write loop, ack for 6 6565 bytes at 65536rndebug3: Sent message SSH2_FXP_CLOSE I:4rndebug3: SSH2_FXP_STATUS 0rndebug3: mux_client_read_packet: read header failed: Broken piperndebug2: Received exit status from master 0rn')
<server-a-ip> ESTABLISH SSH CONNECTION FOR USER: root
<server-a-ip> SSH: EXEC ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=root -o ConnectTimeout=10 -o ControlPath=/Users/max7z/.ansible/cp/9c5eb423c5 server-a-ip '/bin/sh -c '"'"'chmod u+x /root/.ansible/tmp/ansible-tmp-1530864809.51-156163648940516/ /root/.ansible/tmp/ansible-tmp-1530864809.51-156163648940516/synchronize.py && sleep 0'"'"''
<server-a-ip> (0, '', 'OpenSSH_7.6p1, LibreSSL 2.6.2rndebug1: Reading configuration data /Users/max7z/.ssh/configrndebug1: /Users/max7z/.ssh/config line 1: Applying options for *rndebug1: Reading configuration data /etc/ssh/ssh_configrndebug1: /etc/ssh/ssh_config line 48: Applying options for *rndebug1: auto-mux: Trying existing masterrndebug2: fd 3 setting O_NONBLOCKrndebug2: mux_client_hello_exchange: master version 4rndebug3: mux_client_forwards: request forwardings: 0 local, 0 remoterndebug3: mux_client_request_session: enteringrndebug3: mux_client_request_alive: enteringrndebug3: mux_client_request_alive: done pid = 64910rndebug3: mux_client_request_session: session request sentrndebug1: mux_client_request_session: master session id: 2rndebug3: mux_client_read_packet: read header failed: Broken piperndebug2: Received exit status from master 0rn')
<server-a-ip> ESTABLISH SSH CONNECTION FOR USER: root
<server-a-ip> SSH: EXEC ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=root -o ConnectTimeout=10 -o ControlPath=/Users/max7z/.ansible/cp/9c5eb423c5 -tt server-a-ip '/bin/sh -c '"'"'/usr/bin/python /root/.ansible/tmp/ansible-tmp-1530864809.51-156163648940516/synchronize.py && sleep 0'"'"''

为什么它不远程复制到远程?

答案是,ansible 模块"运行并源自运行 Ansible 的本地主机"。请参阅模块文档。 要复制远程到远程,您必须交换 ssh 密钥。您可以使用以下标语册作为考试:

- hosts: server-a
tasks:
# transfer local pub-key to remote authorized_keys
- name: fetch local ssh key from root user
shell: cat /root/.ssh/id_rsa.pub
register: ssh_keys
changed_when: false
- name: deploy ssh key to remote server
authorized_key:
user: "root"
key: "{{ item }}"
delegate_to: "server-b"
with_items:
- "{{ ssh_keys.stdout }}"
# fetch remote host key and add to local known_hosts
# to omit key accept prompt
- name: fetch ssh rsa host key from remote server
shell: cat /etc/ssh/ssh_host_rsa_key.pub
register: ssh_host_rsa_key
delegate_to: server-b
changed_when: false
- name: create /root/.ssh/ if not existant
file:
path: "/root/.ssh/"
owner: root
group: root
mode: 0700
state: directory
- name: add hostkey to root known host file
lineinfile:
path: "/root/.ssh/known_hosts"
line: "{{ server-b.inventory_hostname }} {{ ssh_host_rsa_key.stdout }}"
mode: 0600

最新更新