在CentOS系统中批量修改密码是一项常见的管理任务,尤其在服务器集群或大量虚拟机需要统一密码策略时,本文将介绍几种安全高效的方法,帮助管理员完成批量密码修改工作,同时确保操作过程的安全性和可追溯性。

准备工作
在开始批量修改密码前,需要做好充分的准备工作,确保你有足够的权限访问目标服务器,通常需要root权限或sudo权限,建议提前备份重要的配置文件和用户数据,以防操作失误导致数据丢失,制定一个清晰的密码策略,包括密码复杂度、长度和有效期等,确保符合企业安全标准。
使用Expect脚本批量修改密码
Expect是一种用于自动化交互式程序的工具,非常适合处理需要输入密码的场景,在管理机上安装Expect工具:
yum install expect -y
然后创建一个Expect脚本,例如batch_change_password.exp如下:
#!/usr/bin/expect set username [lindex $argv 0] set new_password [lindex $argv 1] set timeout 5 spawn passwd $username expect "New password:" send "$new_password\r" expect "Retype new password:" send "$new_password\r" expect eof
为脚本添加执行权限后,可以通过循环为多个用户修改密码:
for user in user1 user2 user3; do ./batch_change_password.exp $user "NewPassword123" done
利用SSH密钥认证批量执行命令
如果目标服务器已配置SSH密钥认证,可以更高效地批量执行命令,在管理机上生成SSH密钥对并分发到目标服务器:

ssh-keygen -t rsa ssh-copy-id user@target_server
然后创建一个包含用户名和新密码的文件,例如users.txt,格式为:
user1:NewPassword123
user2:Password456
编写一个Shell脚本batch_ssh_change.sh:
#!/bin/bash while IFS=':' read -r username password; do ssh "$username@target_server" "echo '$username:$password' | chpasswd" done < users.txt
执行该脚本即可批量修改密码。
使用Ansible自动化批量修改密码
Ansible是一款强大的自动化运维工具,可以轻松实现批量密码修改,安装Ansible并配置Inventory文件,定义目标服务器组,然后创建一个Playbook,例如change_password.yml:
---
- name: Batch change passwords
hosts: webservers
tasks:
- name: Update password for users
user:
name: "{{ item.username }}"
password: "{{ item.password | password_hash('sha512') }}"
loop:
- { username: 'user1', password: 'NewPassword123' }
- { username: 'user2', password: 'Password456' }
执行Playbook即可完成批量密码修改:

ansible-playbook change_password.yml
注意事项
批量修改密码时,务必注意安全性,避免在脚本中明文存储密码,可以使用加密文件或Ansible Vault保护敏感信息,建议在非生产环境测试脚本,确认无误后再在生产环境执行,记录操作日志,便于后续审计和故障排查。
相关FAQs
Q1: 如何确保批量修改密码过程中的安全性?
A1: 为确保安全性,建议使用SSH密钥认证代替密码认证,避免在脚本中明文存储密码,可以使用Ansible Vault等工具加密敏感信息,并限制脚本的执行权限,在非生产环境充分测试脚本,减少误操作风险。
Q2: 批量修改密码后如何验证密码是否成功更新?
A2: 验证方法包括:1) 使用ssh username@target_server尝试登录,检查是否能用新密码成功连接;2) 在目标服务器上执行passwd -S username命令,查看密码状态;3) 检查/etc/shadow文件中对应用户的密码哈希值是否已更新。