CentOS脚本:批量修改普通用户的密码
从 /etc/passwd 中逐条读取“ID不小于500”、“shell不是/sbin/nologin”的用户名后依次修改其密码为其用户名的base64码。
部分系统(Debian/Suse等)不支持“–stdin”参数可能会导致修改失败,在使用之前请查看passwd命令的帮助信息看是否支持此参数。
#!/bin/bash # 重置所有ID大于500的用户的密码 userlist=$(awk 'BEGIN{FS=":"};\ {\ if($3 >= 501 && $7 !~ "/sbin/nologin")\ printf $1"\n"}'\ /etc/passwd) for i in $userlist do echo "正在修改[ "$i" ]的密码:" #echo `echo $i | base64`| passwd $i --stdin # 正式使用时将上边的注释取消,密码被设置为用户名的base64码 done
如果需要交互操作可以将以下部分加到代码中的相应位置:
echo "警告:1、此脚本将重置所有普通用户的密码!" echo " 2、ID不小于500的用户都将受到影响" echo " 3、使用 base64 生成密码" echo "确定执行?[Y/N]" read BEGIN if [ "$BEGIN" != "Y" ]; then echo "您没有输入“Y”脚本已取消。" exit; fi # 这之后可以放具体的执行代码
完整示例:
#!/bin/bash echo "警告:1、此脚本将重置所有普通用户的密码!" echo " 2、ID不小于501的用户都将受到影响" echo " 3、使用 pwdMaker.sh 的计算密码" echo " 4、作者:user@upall.cn" echo " 5、日期:2012-07-03 10:06:34 [2]" echo "确定执行?[Y/N]" read BEGIN if [ "$BEGIN" != "Y" ]; then echo "您没有输入“Y”脚本已取消。" exit; fi # 以上代码用于提示,可以不要,下边是核心代码 userlist=$(awk 'BEGIN{FS=":"};\ {\ if($3 >= 501 && $7 !~ "/sbin/nologin")\ printf $1"\n"}'\ /etc/passwd) for i in $userlist do echo "正在修改[ "$i" ]的密码:" echo `pwdMaker.sh $i`| passwd $i --stdin done
<完>