linux自动生成在非root用户密码到期前生成密码写到文件中的脚本
脚本名称(自动生成test的密码并设置):
auto_setting_test_passwd.sh
#!/bin/bash
# 当前年月日时分秒 20230421153045
current_date=$(date +"%Y%m%d%H%M%S")
# 随机生成密码 不符合条件的重新生成 直到生成正确的
generate_complex_password() {
# 生成包含至少1个大写字母、1个小写字母、1个数字和任意数量特殊字符的密码
while true; do
PASSWORD=$(head /dev/urandom | tr -dc 'A-Za-z0-9!@#$%^&*()_+=-|{}[]:;' | head -c 12)
if echo "$PASSWORD" | grep -q '[A-Z]' && echo "$PASSWORD" | grep -q '[a-z]' && echo "$PASSWORD" | grep -q '[0-9]'; then
break
fi
done
echo "$PASSWORD"
}
# 查找上一次改密码的时间 秒数
last_changed_date=$(($(grep "^test:" /etc/shadow | cut -d: -f3) * 86400))
echo $last_changed_date
# 获取test用户的密码最后一次更改秒数 这个时间戳通常是Unix时间戳格式,是一个整数值,表示从1970年1月1日(UTC时间)以来的秒数
last_change=$(grep "^test:" /etc/shadow | cut -d: -f3)
# 计算当前时间与上次更改密码时间之间的差值(单位:天)
diff_days=$(( ( $(date +%s) - $last_changed_date ) / 86400 ))
echo $diff_days
# 超过90天 重新设置密码
if [ "$diff_days" -ge 90 ]
echo "User $user has not changed their password in over 90 days, forcing a change..."
echo "test:$(generate_complex_password)" | chpasswd
# 写入test目录下的test_password.txt文件中
echo "$current_date user:test change password: $(generate_complex_password)" >>/test/test_password.txt
fi