ansible批量推送ssh key的方法,这里记录一下。
假设有以下主机列表
$ cat /opt/list
[new]
172.20.121.109
172.20.114.69
172.20.114.57
172.20.114.58
172.20.114.59
1,使用ansible命令来推送SSH Key
命令比较简单,一行即可搞定
$ ansible -i /opt/list new -m authorized_key -a "user=admin key='{{ lookup('file','/home/admin/.ssh/id_rsa.pub') }}'" -k
这里解释一下命令:
-i表示指定IP列表文件位置,后面的new表示文件里的分组
-k表示询问目标IP的密码
-a后面表示authorized_key模块的参数,user和key是2个必需的参数,也可以加一个默认参数state=present(加不加均可),如果设置state=absent则表示删除这一条key
经测试,反复运行多次此命令,远程机器上的~/.ssh/authorized_keys文件里只会存在一行,不会存在多行key。
2,使用playbook来推送SSH key
$ vim key.ymal
- hosts: new
user: admin
tasks:
- name: Set authorized key took from file
authorized_key: user=admin state=present key="{{ lookup('file', '/home/admin/.ssh/id_rsa.pub') }}"
文件解释:
hosts: 表示/opt/list文件里的分组
user: 表示本地用户,这里如果写错可能导致执行失败
$ ansible-playbook -i /opt/list key.ymal -k
Leave a Comment