批量修改Linux账户密码

Eave 2026.06.23

批量修改Linux账户密码

#!/bin/bash
PASSWD_FILE="users.txt"
LOG_FILE="batch_passwd.log"


if [ ! -f "$PASSWD_FILE" ]; then
    echo "密码文件不存在: $PASSWD_FILE"
    exit 1
fi


# 用 :作为字段分隔符 第一个字段 → user,第二个 → password
while IFS=: read -r user password; do
    # 去除空行和注释
    [[ -z "$user" || "$user" =~ ^# ]] && continue

    if id "$user" &>/dev/null; then
        echo "$user:$password" | chpasswd
        if [[ $? -eq 0 ]]; then
            echo "$(date '+%F %T') SUCCESS $user" | tee -a $LOG_FILE
            echo "user=$user password=$password" | tee -a $LOG_FILE
        else
            echo "$(date '+%F %T') FAILED  $user" | tee -a $LOG_FILE
        fi
    else
        echo "$(date '+%F %T') SKIP    $user (not exist)" | tee -a $LOG_FILE
    fi
done < $PASSWD_FILE

或者更简单的方法:chpasswd < users.txt

users.txt文件内容或格式如下:

mysql:password123
www:password123

附

1、强制下次登录修改密码

# 设置密码最后修改日期 0:表示 1970-01-01
chage -d 0 $user

2、密码过期策略

# 密码最多使用90天,到期后必须修改
chage -M 90 $user
参数 含义
-d 0 立即过期(下次登录改密)
-m 7 最短7天内不能改
-M 90 最长90天
-W 7 提前7天警告
-E 2026-12-31 账号到期时间

3、查看效果

chage -l $user

4、密码不过期通用规则

# 密码不过期通用规则(加大密码过期时间)
chage -M 99999 $user
# 清除单个用户的密码过期策略(最常用)
chage -d -1 -m 0 -M -1 -I -1 -E -1 sshuser

5、openssl命令生成密码

# 生成24位随机密码
password=$(openssl rand -base64 18)