Linux 批量修改系统用户密码:利用自动化工具完成

作者:袖梨 2026-07-07
chpasswd可高效批量修改用户密码,支持标准输入和文件导入,需确保格式规范、权限正确及密码安全,推荐结合校验、加密控制与自动化清理流程。

直接用 chpasswd 就能高效完成,无需写复杂脚本或装额外工具。它原生支持批量操作,关键在格式规范、权限到位、密码安全。

chpasswd 基础用法:一行命令搞定多个用户

系统自带的 chpasswd 是最轻量、最可靠的批量改密方式。它不依赖网络、不需交互,只要 root 权限和正确格式的输入即可运行。

  • 从标准输入修改: echo "user1:NewPass@2026" | sudo chpasswd
  • 从文件批量导入:准备 users.txt,每行一个 用户名:密码(冒号英文、无空格),然后执行 sudo chpasswd < users.txt
  • 确认用户已存在:运行前用 id usernamegetent passwd username 检查,避免静默失败

密码安全与加密控制

明文密码直接传入有泄露风险,生产环境必须控制加密方式和生命周期。

  • 强制使用强哈希:加 -c SHA512 参数,例如 sudo chpasswd -c SHA512 < users.txt
  • 避免命令行留痕:不要在 echo 中硬编码密码;优先用文件,并设权限 chmod 600 users.txt
  • 改完立即清理:用 shred -u users.txt 安全擦除原始密码文件,不留痕迹

自动化脚本封装建议

把检查、执行、清理串成可复用的流程,减少人为疏漏。

  • 开头校验文件是否存在、是否可读
  • 逐行解析 users.txt,用 id 预检用户,跳过不存在的账户并记录警告
  • 执行 chpasswd 后检查退出码,$? 非 0 时中断并提示错误
  • 成功后自动销毁密码文件,不依赖人工清理

跨服务器批量处理(进阶场景)

单台机器用 chpasswd 足够;若需同步改多台,推荐组合 SSH 密钥 + 简单循环,而非引入 sshpass 或 expect。

  • 先部署免密登录:用 ssh-copy-id 推送公钥到所有目标主机
  • 用 for 循环分发命令: for host in srv01 srv02 srv03; do ssh "$host" 'sudo chpasswd < /tmp/batch.pass' < users.txt; done
  • 更稳的方式是把 users.txtscp 过去,再远程执行,避免管道传输中断

相关文章

精彩推荐