passwd命令仅red hat系支持--stdin,debian/ubuntu等不支持;更通用安全的方式是用chpasswd批量导入username:password格式数据。

passwd 命令本身不原生支持所有发行版的管道输入,但可通过搭配 chpasswd 或特定发行版的 --stdin 选项实现非交互式批量改密。关键在于区分系统类型、权限层级和安全边界。
确认系统是否支持 passwd --stdin
仅 Red Hat 系列(如 CentOS、RHEL、AlmaLinux)的 passwd 默认支持 --stdin;Debian/Ubuntu、SUSE、openEuler 等主流发行版默认不支持,强行使用会报错 unrecognized option '--stdin'。
- 验证方式:运行
passwd --help | grep stdin或man passwd查看是否有该选项说明 - 若支持,可直接用:
echo "newpass123" | sudo passwd --stdin username - 注意:密码含单引号、换行或特殊字符时易出错,且命令历史中明文留存,存在泄露风险
更通用安全的做法:用 chpasswd 批量导入
chpasswd 是跨发行版兼容、专为非交互场景设计的工具,需 root 权限,接受 username:password 格式的标准输入。
- 单用户快速修改:
echo "alice:Secur3P@ss2026" | sudo chpasswd - 多用户批量处理:准备文本文件
users.txt,每行一个用户密码对:bob:Passw0rd!carol:2026July#
然后执行:sudo chpasswd - 密码明文在文件中,建议操作后立即
shred -u users.txt安全擦除
高安全性方案:用哈希值写入 shadow(免明文)
避免在任何环节暴露明文密码,适合自动化部署或合规要求高的环境。
- 生成 SHA-512 加密哈希:
openssl passwd -6 newpassword(输出类似$6$...$...) - 构造格式化行:
username:$6$salt$hashstring - 批量写入:
echo "dave:$6$abc123$xyz..." | sudo chpasswd -e(-e表示输入已是加密格式) - 或直接编辑 shadow:
sudo vipw -s,手动替换对应用户的第二字段(注意备份与语法严谨性)
注意事项与常见陷阱
非交互改密不是“一键万能”,需兼顾权限、策略和审计要求。
- 普通用户无法修改他人密码,
sudo权限必须明确授予chpasswd或passwd - PAM 密码策略(如最小长度、复杂度)仍会生效,弱密码会被拒绝,
chpasswd返回非零退出码可捕获失败 - 修改后用户首次登录可能触发强制改密(如设置了
chage -d 0 username),需提前评估业务影响 - SSH 密钥登录用户不受密码修改影响,但若同时禁用了密钥认证,则需确保新密码可用











