批量修改用户密码的命令chpasswd
步骤 1:准备密码文件
创建密码文件
创建一个文本文件,每行包含一个用户名和密码,格式为用户名:密码
。例如:vi user_passwords.txt
文件内容示例:
user1:Password@123456 user2:SecurePass67890 user3:MyP@ssw0rd88888
验证文件格式
- 确保文件中无空行或多余字符。
- 用户名必须是系统中已存在的用户。
- 密码需符合系统的密码策略(如长度、复杂度要求)。
步骤 2:执行批量修改命令
方法 1:直接从文件读取
- 使用
chpasswd
命令
以root
用户身份运行以下命令:chpasswd < user_passwords.txt
- 说明:
chpasswd
会逐行读取文件,并更新对应用户的密码。
- 说明:
方法 2:通过管道传递
单次修改多个用户
直接通过管道传递用户名和密码对:echo "user1:Password@123456" | chpasswd echo "user2:SecurePass67890" | chpasswd
批量修改(推荐)
将多个用户密码一次性传递cat user_passwords.txt | chpasswd
步骤 3:使用加密密码(可选)
如果需要避免明文密码暴露,可以使用加密密码:
生成加密密码
使用openssl
或mkpasswd
工具生成加密密码openssl passwd -1 "YourPassword" # 生成 SHA-1 加密密码 mkpasswd -m sha-512 "YourPassword" # 生成 SHA-512 加密密码
修改密码文件格式
在密码文件中使用加密后的密码:user1:$1$9E8ZkV2Udew$xKtXgt0eA1B2C3wD4E727vL6gHc5 user2:$6$rounddw22k0$abc123$dhiudw29
使用
-e
参数
执行命令时指定-e
参数以处理加密密码:chpasswd -e < encrypted_passwords.txt
步骤 4:验证修改结果
检查用户密码状态
使用chage -l 用户名
或passwd -S 用户名
查看密码状态:chage -l user1 # 查看 user1 的密码过期信息 passwd -S user2 # 查看 user2 的密码状态
手动验证登录
使用新密码登录测试用户账户,确保修改生效。
注意事项
权限要求
- 必须以
root
用户或具有sudo
权限的用户执行chpasswd
。 - 普通用户无权修改其他用户的密码。
- 必须以
安全风险
- 明文密码文件:确保密码文件权限设置为
600
(仅所有者可读写):chmod 600 user_passwords.txt
- 操作后清理:修改完成后立即删除密码文件:
rm -f user_passwords.txt
- 明文密码文件:确保密码文件权限设置为
密码策略兼容性
- 如果系统启用了 PAM 模块的密码复杂度检查(如
pam_pwquality
),确保新密码符合以下要求:- 长度至少 8 位。
- 包含大小写字母、数字和特殊字符。
- 不与历史密码重复。
- 如果系统启用了 PAM 模块的密码复杂度检查(如
错误处理
- 如果文件中存在无效用户或格式错误,
chpasswd
会静默失败。建议通过以下方式验证:grep -v '^$' user_passwords.txt | while IFS=: read user pass; doif id "$user" &>/dev/null; thenecho "$user:$pass" | chpasswdelseecho "User $user does not exist."fi done
- 如果文件中存在无效用户或格式错误,
完整示例
# 1. 创建密码文件
cat <<EOF > /mnt/user_passwords.txt
user1:Password@123456
user2:SecurePass67890
user3:MyP@ssw0rd88888
EOF# 2. 设置文件权限
chmod 600 /mnt/user_passwords.txt# 3. 批量修改密码
chpasswd < /mnt/user_passwords.txt# 4. 删除文件
rm -f /mnt/user_passwords.txt