CentOS脚本:批量修改普通用户的密码
从 /etc/passwd 中逐条读取“ID不小于500”、“shell不是/sbin/nologin”的用户名后依次修改其密码为其用户名的base64码。
部分系统(Debian/Suse等)不支持“–stdin”参数可能会导致修改失败,在使用之前请查看passwd命令的帮助信息看是否支持此参数。
1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/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 |
如果需要交互操作可以将以下部分加到代码中的相应位置:
1 2 3 4 5 6 7 8 9 10 | echo "警告:1、此脚本将重置所有普通用户的密码!" echo " 2、ID不小于500的用户都将受到影响" echo " 3、使用 base64 生成密码" echo "确定执行?[Y/N]" read BEGIN if [ "$BEGIN" != "Y" ]; then echo "您没有输入“Y”脚本已取消。" exit ; fi # 这之后可以放具体的执行代码 |
完整示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #!/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 |
<完>