脚本目的:批量修改linux系统root用户密码
条件:必须是修改的用户是root,因为只有root才有权限使用passwd命令
说明:先把IP、用户、密码、端口信息写到old_info文件中,脚本从这个文件读取对应的信息,利用expect免交互登陆系统。将随机生成的8位密码修改为root用户新密码。然后将新密码保存到net_info文件中.
[[email protected] test1]# cat old_info
# ip user passwd port
#------------------------------------------------
192.168.1.181 root admini123 22
192.168.1.182 root admini123 22
[[email protected] test1]# cat change_pass.sh
#! /bin/bash
old_info=/opt/test1/old_info
new_info=/opt/test1/new_info
for ip in `awk '/^[^#]/{print $1}' $old_info`
do
user=`awk -v I=$ip '{if(I==$1)print $2}' $old_info`
pass=`awk -v I=$ip '{if(I==$1)print $3}' $old_info`
port=`awk -v I=$ip '{if(I==$1)print $4}' $old_info`
new_pass=`mkpasswd -l 8` #mkpasswd生成随机密码
echo "$ip $user $new_pass $port" >> $new_info
expect -c "
spawn ssh -p$port [email protected]$ip #spawn执行一个命令
set timeout 2 #设置超时
expect {
\"(yes/no)\" {send \"yes\r\";exp_continue}
\"password:\" {send \"$pass\r\";exp_continue}
\"[email protected]*\" {send \"echo \'$new_pass\' |passwd --stdin $user\r exit\r\";exp_continue}
}"
done
结果:
参数说明:
set:可以设置超时,也可以设置变量
timeout:expect超时等待时间,默认10S
spawn:执行一个命令
expect "":匹配输出的内容
exp_continue:继续执行下面匹配
\r:可以理解为回车
awk -v I="$ip":赋值变量
expect{...}:输入多行记录
mkpasswd:可参考以下网址:http://www.linuxidc.com/Linux/2012-11/73687.htm
本文章参考了:
http://lizhenliang.blog.51cto.com/7876557/1674791
转载于:https://blog.51cto.com/5609180/1870396