在Ansible剧本中致电ssh-copy-id-如何处理密码提示?

fun*_*len 6 ssh ansible ansible-playbook

我有两台服务器。我serverA与Ansible合作。serverB不通过Ansible管理。我希望serverA能够获得serverB通过复制ssh_pub_keyserverAserverB

这可以手动调用来完成ssh-copy-id user@serverBserverA

我想serverA自动启用Ansible 。

- name: Register ssh key at serverB
  command: ssh-copy-id -i /home/{{user}}/.ssh/id_rsa.pub -o StrictHostKeyChecking=no user@serverB
Run Code Online (Sandbox Code Playgroud)

打电话ssh-copy-id要求我输入user @ serverB的ssh密码,以便可以复制密钥。

我如何通过ansible做到这一点?我希望它在执行剧本时以交互方式询问user @ serverB密码。也可以选择将密码存储在ansible Vault中。那我仍然不知道如何避免交互式的密码调用ssh-copy-id

我还添加-o StrictHostKeyChecking=no了呼叫,因为这是另一种交互,通常在调用ssh-copy-id时需要用户交互。

Jak*_*uje 6

您可以尝试sshpass工具。它需要像下面这样修改您的命令:

command: sshpass -p password ssh-copy-id -i /home/{{user}}/.ssh/id_rsa.pub -o StrictHostKeyChecking=no user@serverB
Run Code Online (Sandbox Code Playgroud)

但是还有其他提供密码的选项-请参见sshpass(1)手册页。


dok*_*par 6

如果使用ssh-copy-id命令不是限制,你不妨试试 Ansibleauthorized_key模块。

那么您的代码可能如下所示:

authorized_key:
  user: <user>
  key: "{{ lookup('file', '/home/' + lookup('env', 'USER') + '/.ssh/id_rsa.pub') }}"
Run Code Online (Sandbox Code Playgroud)