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

标签 ssh ansible

我有两台服务器。我管理serverA与安西 bool 。 serverB不由 Ansible 管理。我要 serverA能够访问serverB通过复制 ssh_pub_keyserverAserverB .

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

我想使用 Ansible 在 serverA 上执行此操作自动。

- 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要求我输入 user@serverB 的 ssh 密码,以便可以复制 key 。

我怎样才能通过ansible做到这一点?我希望它在执行剧本时以交互方式询问 user@serverB 密码。将密码存储在 ansible 保管库中也是一种选择。那我还是不知道如何避免ssh-copy-id的交互式密码调用不过。

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

最佳答案

如果使用ssh-copy-id命令没有限制,您不妨尝试一下Ansible authorized_key模块。

那么你的代码可能看起来像这样:

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

关于ssh - 在 Ansible playbook 中调用 ssh-copy-id - 如何处理密码提示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31681144/

相关文章:

ansible - 如何在 Ansible(脚本模块)中转义反斜杠和双引号

python - Ansible gce 模块 : create instance with customize disk size

linux - gui 和 ssh session 的不同 bash 别名

bash - While 循环在 Bash 中的第一行之后停止读取

macos - Ansible 要求安装 MySQL-python,尽管它已经安装

bash - 使用 Ansible 使用 virtualenv 信息更新 bashrc

Ansible 在角色中设置 ansible_user 和 ansible_ssh_pass

c# - 仅知道部分文件名的情况下在 SFTP 上获取远程文件

linux - 多次 ssh 登录/注销

java - JSCH session 连接问题