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
<完>