在Ansible playbook中调用ssh副本id-如何处理密码提示?
我有两台服务器。我用Ansible管理服务器A<代码>服务器B未使用Ansible进行管理。我希望在Ansible playbook中调用ssh副本id-如何处理密码提示?,ssh,ansible,ansible-playbook,Ssh,Ansible,Ansible Playbook,我有两台服务器。我用Ansible管理服务器A服务器B未使用Ansible进行管理。我希望serverA能够通过将serverA的ssh\u pub\u键复制到serverB来访问serverB 这可以通过调用ssh copy id手动完成user@serverB服务器A上的 我想用serverA上的Ansible自动执行此操作 - name: Register ssh key at serverB command: ssh-copy-id -i /home/{{user}}/.ssh/id
serverA
能够通过将serverA
的ssh\u pub\u键
复制到serverB
来访问serverB
这可以通过调用ssh copy id手动完成user@serverB服务器A上的
我想用serverA
上的Ansible自动执行此操作
- name: Register ssh key at serverB
command: ssh-copy-id -i /home/{{user}}/.ssh/id_rsa.pub -o StrictHostKeyChecking=no user@serverB
调用ssh copy id
需要我输入我的ssh密码user@serverB,因此可以复制密钥
我怎样才能通过ansible做到这一点?我想让它来要求user@serverB在执行剧本时以交互方式输入密码。将密码存储在ansible vault中也是一个选项。然后我仍然不知道如何避免交互式密码调用ssh copy id
我还向调用中添加了-o strichhostkeychecking=no
,因为这是另一种交互,在调用ssh-copy-id时通常需要用户交互。您可以尝试sshpass
工具。它需要对您的命令进行如下修改:
command: sshpass -p password ssh-copy-id -i /home/{{user}}/.ssh/id_rsa.pub -o StrictHostKeyChecking=no user@serverB
authorized_key:
user: <user>
key: "{{ lookup('file', '/home/' + lookup('env', 'USER') + '/.ssh/id_rsa.pub') }}"
但是还有其他选项如何提供密码——请参阅sshpass(1)
手册页。如果使用ssh copy id
命令不是一项限制,您不妨尝试使用Ansible模块
然后,您的代码可以如下所示:
command: sshpass -p password ssh-copy-id -i /home/{{user}}/.ssh/id_rsa.pub -o StrictHostKeyChecking=no user@serverB
authorized_key:
user: <user>
key: "{{ lookup('file', '/home/' + lookup('env', 'USER') + '/.ssh/id_rsa.pub') }}"
授权密钥:
用户:
密钥:“{lookup('file','/home/'+lookup('env','USER')+'/.ssh/id_rsa.pub')}”
这是一个很好的方法。如何以交互方式在之前请求密码,以便将变量传递给sshpass?在什么之前?您正在cron中运行。我要补充的是,Ansible链接指向旧版本的文档。当前版本为。