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

问题描述 投票:5回答:2

我有两台服务器。我用Ansible管理serverAserverB不受Ansible管理。我希望serverA能够通过将serverBssh_pub_key复制到serverA来访问serverB

这可以通过在ssh-copy-id user@serverB上调用serverA手动完成。

我想自动在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要求我输入用户@ serverB的ssh密码,这样就可以复制密钥。

我怎么能通过ansible做到这一点?我希望它在执行playbook时以交互方式请求user @ serverB密码。将密码存储在ansible Vault中也是一种选择。然后我仍然不知道如何避免ssh-copy-id的交互式密码调用。

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

ssh ansible ansible-playbook
2个回答
6
投票

你可以试试sshpass工具。它需要修改你的命令,如下所示:

command: sshpass -p password ssh-copy-id -i /home/{{user}}/.ssh/id_rsa.pub -o StrictHostKeyChecking=no user@serverB

但是如何提供密码还有其他选择 - 请参阅sshpass(1)手册页。


0
投票

如果使用ssh-copy-id命令不是限制,你可以试试Ansible authorized_key模块。

然后你的代码看起来像这样:

authorized_key:
  user: <user>
  key: "{{ lookup('file', '/home/' + lookup('env', 'USER') + '/.ssh/id_rsa.pub') }}"
© www.soinside.com 2019 - 2024. All rights reserved.