我想知道如何使用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
答案 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