Press "Enter" to skip to content

Month: April 2017

ansible批量推送ssh key+批量推送文件(夹)

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