公司往往有这样的需求,当离职人员离职之后,则需要修改各种用户的密码,所以再此记录下如何通过ansible批量修改centos密码,由于我也是才开始接触自动化运维,ansible也是刚开始使用,如果有什么说错的地方,或者有什么可以优化的,欢迎各位大佬指出说明
1.通过ansible-playbook user模块修改密码
vim passwd.yml
---
- hosts: all
gather_facts: false
remote_user: root
tasks:
- name: Change password
user: name={{name1}} password={{ chpass | password_hash('sha512') }} update_password=always
执行ansible-playbook passwd.yml -e “name1=root chpass=123”
这样我们就可以给ansible配置中所有主机修改root密码为123
2.但是我们往往有这种需求,分别要给不同的主机修改不同的密码,而不是统一的密码,根据我在网上查阅了一些资料,可以使用‘openssl rand -base64 12’命令获取随机字符,然后赋予用户密码,但是这种方法获取的密码复杂性并不是百分百都能满足我的需求,所以我觉得使用mkpasswd来获取密码。
由于mkpasswd需要安装expect包才可以使用,一开始我首先想到通过ansible先安装expect包然后通过mkpasswd获取密码,但是由于并不是所有的客户机都能够通过yum命令安装包,如果通过源码编译会使这个操作变得有点复杂
最后我决定通过ansible主控机来生成所有客户机的密码并且修改,在研究了几个小时之后我决定通过shell脚本和ansible共同完成这个操作
vim passwd.sh
#!/bin/bash
echo '' > /etc/ansible/tmp/passwd/newpass.txt
for i in `/usr/bin/cat /etc/ansible/hosts|grep ansible|grep -v '#'|awk -F ' ' '{print $1}'`
do
mkpasswd -l 20 > /etc/ansible/tmp/passwd/$i
k=`cat /etc/ansible/tmp/passwd/$i`
ansible $i -m copy -a 'src=/etc/ansible/tmp/passwd/{{name}} dest=/root/passroot' -e "name=$i"
ansible $i -m shell -a 'cat /root/passroot|passwd --stdin root'
ansible $i -m file -a 'path=/root/passroot state=absent'
#ansible $i -m command -a 'chdir=/root/ ls'
echo $i $k >> /etc/ansible/tmp/passwd/newpass.txt
done
使用这个脚本会有一个警告,应该是我在ansible命令中定义了变量导致,但是由于对结果并没有影响,而且我也是刚接触这个工具,暂时也不会优化,所以就放着没有管