要求: 批量修改服务器的某账号(假设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/bash
PASS=`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里面。
使用ansible批量修改用户密码的方法,因为在使用ansible修改用户密码的时候不能使用明文的方式,需要先加密,所以就需要使用一个方法对输入的明文的密码进行加密,操作方法如下:
方法一:
1.1、该方法适用于更改多个用户;playbook写法如下:
vim userpass.yaml
---
- hosts: zksit
gather_facts: false
tasks:
- name: change user passwd
user: name={{ item.name }} password={{ item.chpass | password_hash('sha512') }} update_password=always
with_items:
- { name: 'jacky', chpass: 'jacky@123' }
1.2、执行playbook如下:
# ansible-playbook userpass.yaml
方法二:(已测,会在ansible shell history中显示明文)
2.1 该方法更改单用户比较方便,从外面使用-e参数传递变量到playbook中,playbook写法如下:
vim userpass2.yaml
- hosts: test
remote_user: root
tasks:
- name: Change password
user: name={{ name1 }} password={{ chpass | password_hash('sha512') }} update_password=always
2.2 、执行playbook脚本,使用-e参数传递用户名和密码给剧本,其中jacky为用户名,jacky@123就是要设置密码,执行如下:
# ansible-playbook userpass2.yaml -e "name1=jacky chpass=jacky@123"
---------------------
https://blog.csdn.net/qq_31977125/article/details/82796995
https://blog.csdn.net/jackyzhousales/article/details/84836883