我发现this SO post关于使用ansible在节点之间复制文件。这是一个安全的任务:
- name: Copy Pipeline files
synchronize: mode=pull src=/home/ec2-user/nlp/nlp_test/all_data/test/ dest=/opt/nlp-ml/rate/Pipeline dirs=yes
delegate_to: "{{ ml_ip }}"
我用我的剧本试了一下,但它的消息失败了:
msg: Warning: Identity file /Users/me/me.pem not accessible: No such file or directory.
Permission denied (publickey).
这是有道理的,因为我的身份文件存储在本地而不是远程计算机上。但是,源节点的公钥已经分发给目标节点。我怎么能绕过这个?
编辑:我尝试将目标节点的公钥添加到源节点。然后我将use_ssh_args=yes
添加到同步任务中。之后,我将ssh_args = -i /home/ec2-user/.ssh/id_rsa
(源和目标节点上私钥的位置)添加到ansible.cfg。同样的问题。
答案 0 :(得分:1)
所以为了做到这一点,它需要我尝试过的东西的组合。 @vvchik建议我尝试删除mode = pull,这在最初没有用。但是,当与use_ssh_args结合使用时,我能够让它工作。对于任何想要完整解决方案的人来说,这里是:
在源节点上生成ssh密钥(在默认位置,没有密码),并将其安装在目标节点上。添加此任务:
- name: Copy files from source to destination
synchronize: src=source dest=destination dirs=yes use_ssh_args=yes
delegate_to: "{{ source_ip }}"
最后,在ansible.cfg中添加ssh_args = -i /home/user/.ssh/id_rsa
。 ansible.cfg应该在当前目录中。