之前我发布了一篇文章‘通过Ansible修改客户机密码’是通过shell和ansible命令来实现对客户机修改密码,实际执行过程中循环多次ansible命令,效率较低且安全性较低。
上一篇文章:https://blog.csdn.net/qq_19275631/article/details/100134972
研究之后,发现我们可以通过ansible的user模块来修改客户端密码,具体方式如下
1.为了给每台服务器传不同的参数,我们需要在hosts文件中定义变量,每个主机可以对应多个变量
[hosts]
ansible-TestWithNet ansible_ssh_host=192.168.5.11 ansible_ssh_port=22 chpass=abc
ansible-TestWithoutNet ansible_ssh_host=192.168.5.12 ansible_ssh_port=22 chpass=abc
如上,我定义主机名成对应变量的IP、端口、和chpass
2.通过mkpasswd命令生成随机密码并且写入hosts文件的chpass变量中
[random_pass.sh]
#!/bin/bash
#通过mkpasswd生成随机密码
for i in `/usr/bin/cat /etc/ansible/hosts|grep ansible|grep -v '#'|awk -F ' ' '{print $1}'`
do
k=`mkpasswd -l 20`
sed -i '/'"$i"'/s/chpass=.*/chpass='"$k"'/g' /hosts
done
3.通过ansible-playbook修改密码
[changepass.yml]
---
- hosts: Front
gather_facts: false
remote_user: root
tasks:
- name: Change password
user: name=root password={{ chpass | password_hash('sha512') }} update_password=always
执行该脚本就可以修改所有客户端root密码为随机生成的密码