检查操作系统当前可登录用户并批量修改密码,通过openssl生成base64的随机密码,且密码复杂度须符合大小写、数字和特殊字符的要求(可调整)。
!!!切记:要保存并记录好新密码!!!
#!/bin/bash # 检查操作系统当前可登录用户并批量修改密码 # ./changePassword.sh -l 'root weblogic' # 主机地址 hostIP=`ip a | grep '10.10.' | awk '{print $2}' | awk -F/ '{print $1}'` # 超级用户 superUser="root" # 随机密码限制次数(超出限制次数将自动停止生成新密码) randTimes=100 # 所有可登录的用户 recentUsr=(${superUser} `ls /home`) # 密码长度 pwdLength=12 # 日志文件 changeLog="${PWD}/changePassword-${hostIP}.log" [ "`whoami`" != "${superUser}" ] && echo "必须以${superUser}用户执行该脚本" && exit 0 # 重置待修改的用户列表 while getopts 'l:' OPT do case ${OPT} in l) userList="$OPTARG";; esac done # 确认或者重置用户列表 while [ -z "${userList}" ] do echo "主机:${hostIP}" echo "用户:${recentUsr[@]}" read -p "确定要重置以上用户的密码吗?输入‘Y’继续,输入‘E’退出..." toNEXT [ "${toNEXT^^}" = "Y" ] && break [ "${toNEXT^^}" = "E" ] && exit 2 done [ -n "${userList}" ] && recentUsr=(${userList}) # 当前时间函数 getTime (){ nowTime=`date +'%Y%m%d%H%M%S'` } # 随机密码函数 getRandom (){ rdmString="`openssl rand -base64 ${pwdLength}`" rdmString=`echo ${rdmString} | grep -E "[0-9]" | grep -E "[A-Z]" | grep -E "[a-z]" | grep -E "[!@#$%^&*()_+<>?/]"` } getTime echo -e ">>>>>>>>>>>>>>>> ${nowTime:0:8} - ${hostIP} <<<<<<<<<<<<<<<" >> ${changeLog} for userName in ${recentUsr[@]} do getRandom getTime flag=1 while [ -z "${rdmString}" ] do [ ${flag} -gt ${randTimes} ] && echo -e "${nowTime}\t用户:${userName}生成新密码时超出次数(${randTimes})限制" >> ${changeLog} && break getRandom flag=`expr ${flag} + 1` done [ -n "`grep ^${userName} /etc/passwd | grep -v nologin`" ] && echo "${rdmString}" | passwd --stdin ${userName} [ $? -eq 0 ] && echo -e "共尝试${flag}次\t密码:${rdmString}\t用户:${userName}" >> ${changeLog} && sleep 0.5 || continue done echo -e "\n" >> ${changeLog} sz ${changeLog} # 删除日志 while true do read -p "确定要删除本机保存的密码修改日志吗?输入‘Y’继续,输入‘E’退出..." toNEXT [ "${toNEXT^^}" = "Y" ] && rm -f ${changeLog} && break [ "${toNEXT^^}" = "E" ] && exit 0 done
原创文章禁止转载:技术学堂 » 检查操作系统当前可登录用户并批量修改密码Shell脚本