我有两台服务器。我用Ansible管理serverA
。 serverB
不受Ansible管理。我希望serverA
能够通过将serverB
的ssh_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时需要用户交互的交互。
你可以试试sshpass
工具。它需要修改你的命令,如下所示:
command: sshpass -p password ssh-copy-id -i /home/{{user}}/.ssh/id_rsa.pub -o StrictHostKeyChecking=no user@serverB
但是如何提供密码还有其他选择 - 请参阅sshpass(1)
手册页。
如果使用ssh-copy-id
命令不是限制,你可以试试Ansible authorized_key
模块。
然后你的代码看起来像这样:
authorized_key:
user: <user>
key: "{{ lookup('file', '/home/' + lookup('env', 'USER') + '/.ssh/id_rsa.pub') }}"