实现目标:利用shell脚本批量修改主机密码,并将存储密码的文件取回
环境说明:需要修改各主机的hostname,且各个主机的hostname不能相同
#批量修改主机名称的脚本
#!/bin/bash
#定义主机的数组
my_hosts=(192.168.1.10 192.168.1.11 192.168.1.12 192.168.1.13)
#循环遍历数组
for(( i=0;i<${#my_hosts[@]};i++)) do
#${#my_hosts[@]}获取数组长度用于循环
echo ${my_hosts[i]};
ansible ${i} -i /etc/ansible/hosts -m shell -a "hostnamectl set-hostname ${i}"
done;
#修改密码的脚本mp.sh
#!/bin/bash
#需要修改的用户名
username=root
#生成随机密码15位,包含数字 大小写英文 特殊字符
password=`< /dev/urandom tr -dc 0-9-A-Z-a-z-@%#|head -c ${1:-15}`
#获取主机的hostname
hostname=`hostname`
#获取ip的命令
#ip addr | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}'
#保存密码到txt文件,该文件需要取回
echo "${hostname} ${username}新密码为 $password" >> /home/${hostname}_password_for_${username}.txt
#执行修改密码
echo ${password} | passwd --stdin ${username}
----------------------
说明:ansible和配置好hosts
cat /etc/ansible/hosts
[test]
192.168.1.10 ansible_host_user=root ansible_host_pass='123456' ansible_ssh_port=22
192.168.1.11 ansible_host_user=root ansible_host_pass='123456' ansible_ssh_port=22
192.168.1.12 ansible_host_user=root ansible_host_pass='123456' ansible_ssh_port=22
192.168.1.13 ansible_host_user=root ansible_host_pass='123456' ansible_ssh_port=22
#main脚本
#!/bin/bash
#脚本分发
ansible test -i /etc/ansible/hosts -m copy -a "src=/root/mp.sh dest=/home/"
ansible test -i /etc/ansible/hosts -m shell -a "cd /home/ && chmod +x mp.sh && sh mp.sh"
#取回密码文件
mkdir -p /home/all_passwords && cd /home/all_passwords/
ansible test -i /etc/ansible/hosts -m fetch -a "src=/home/{{inventory_hostname}}_password_for_root.txt dest=./"