通过ansible批量设置随机密码

来源:互联网 发布:手机桌面图标整理软件 编辑:程序博客网 时间:2024/05/29 19:22

要求:
批量修改服务器的某账号(假设root账号)密码,用随机生成的字符串做密码

环境:
假设/etc/ansible/hosts文件中服务器的目标组如下

[target-servers]192.168.0.[1:100]

执行操作

1 通过openssl rand命令,在每台远程服务器上生成随机字符串用做候选口令字符

ansible target-servers -m shell -a "openssl rand -base64 12 > ~/.openssl"

可以用如下命令查看生成的结果

ansible target-servers -m shell -a "cat ~/.openssl"

2 用候选字符串设置密码
上面的openssl rand -base64 12命令生成的是16位的随机字符串,比如,取前12位作为密码的话,可以通过如下set-pass.sh脚本实现:

#!/bin/bashPASS=`cat ~/.openssl`SUBPASS=`echo ${PASS:0:12}`echo "root:$SUBPASS" | chpasswd

将如上脚本放在ansible中控机上,通过script模块就可以在远端服务器上执行,简单的playbook如下set-pass.yml:

---- hosts: '{{myhosts}}'  remote_user: admin  tasks:  - name: set passwd    script: ~/set-pass.sh     become: true

批量执行操作为:

ansible-playbook set-pass.yml -e "myhosts=target-servers"

执行之后密码就设置完成了。

3 将各服务器上的字符串文件收归到中控机上
可以通过ansible的fetch模块获取远端服务器上的文件,简单的playbook如下fetch-file.yml:

---- hosts: '{{myhosts}}'  remote_user: admin  tasks:  - name: fetch file    fetch:      src: ~/.openssl      dest: ~/fetch/openssl-{{ inventory_hostname }}      flat: yes

批量执行操作为:

ansible-playbook fetch-file.yml -e "myhosts=target-servers"

执行之后就可以在~/fetch/目录下看到获取到的文件,里面的内容就是上面生成的密码字符串

最后,可以将远端服务器上的字符串文件删除:

ansible target-servers -m shell -a "rm -f ~/.openssl"

上面的所有操作,可以汇总写到一个playbook里面。

原创粉丝点击