Ansible可以部署公共SSH密钥只需要一次密码吗?

时间:2017-06-22 19:41:57

标签: ansible ssh-keys ansible-2.x

我想知道如何使用Ansible将我的SSH公钥复制到许多主机。

首次尝试:

ansible all -i inventory -m local_action -a "ssh-copy-id {{ inventory_hostname }}" --ask-pass

但我有错误 The module local_action was not found in configured module paths

使用剧本的第二次尝试:

- hosts: all
  become: no
  tasks:
  - local_action: command ssh-copy-id {{ inventory_hostname }}

最后,我输入了每个托管主机的密码:

ansible all -i inventory --list-hosts | while read h ; do ssh-copy-id "$h" ; done

如何在将公共SSH密钥部署到多个主机时仅填写一次密码?

编辑:我已成功使用Konstantin Suvorov's answer中的以下剧本将我的SSH公钥复制到多个远程主机。

- hosts: all
  tasks:
  - authorized_key:
      key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"

根据documentation,字段user应该是强制性的,但似乎没有。因此,当与此命令行一起使用时,上述通用playbook可用于任何用户:

ansible-playbook -i inventory authorized_key.yml -u "$USER" -k

1 个答案:

答案 0 :(得分:11)

为什么不使用authorized_key模块?

- hosts: all
  tasks:
    - authorized_key:
        user: remote_user_name
        state: present
        key: "{{ lookup('file', '/local/path/.ssh/id_rsa.pub') }}"

并使用-u remote_user_name -k

运行playbook