Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ansible playbook中调用ssh副本id-如何处理密码提示?_Ssh_Ansible_Ansible Playbook - Fatal编程技术网

在Ansible playbook中调用ssh副本id-如何处理密码提示?

在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

我有两台服务器。我用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_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链接指向旧版本的文档。当前版本为。