服务器批量密码修改自动化脚本实践
一、背景与需求
在IDC运维中,定期或应急批量修改服务器root或应用账户密码是常见操作。人工逐台SSH、输入passwd效率低且易出错,尤其管理数百台设备时。自动化脚本可大幅提升操作准确性与速度,降低安全风险。
二、实现方案
1. 基于密钥认证的SSH批量执行
预先配置管理节点到所有目标服务器的SSH免密登录(使用RSA/DSA密钥对),然后通过循环调用ssh user@host 'echo "newpass" | passwd --stdin username'或使用sshpass工具(需注意明文密码风险)。
2. 使用Ansible批量修改
Ansible作为主流自动化工具,可编写playbook调用user模块或shell模块:
- 生成随机密码或统一密码(高安全建议随机)
- 通过
ansible-vault加密密码变量 - 同时记录密码变更日志,便于后续同步
示例playbook核心任务:
- 读取hosts列表(inventory)
- 使用
user: name={{ item }} password={{ new_password|password_hash('sha512') }} - 利用
set_stats模块收集结果
3. 自定义Shell脚本与并行执行
若无Ansible环境,可用Bash脚本配合pdsh或parallel工具:
- 生成密码文件(如随机32位)
- 逐台调用
ssh host 'echo "password" | passwd --stdin' - 配合
expect处理首次连接确认
三、安全要点
- 密码强度:建议使用至少16位含大小写、数字、特殊字符的随机密码,或采用硬件Token生成。
- 传输加密:所有操作须基于加密通道(SSH),避免在公网明文传递密码。
- 审计留存:密码修改成功后,脚本应记录目标主机、时间、操作人,并将密码加密存入密码管理平台(如Hashicorp Vault)。
- 回退计划:操作前备份原密码(加密存储)或保留维护通道(如带外管理卡)。
四、实践建议
推荐先用测试环境验证脚本,并设置“幂等性”处理(相同密码重复执行不报错)。对于超大规模集群,可分段执行并观察系统负载。脚本应包含错误重试、超时处理及邮件告警。
五、总结
服务器批量密码修改自动化已成为IDC运维的标配能力。根据团队技术栈选择Ansible、SaltStack或定制脚本都能实现高效、安全的密码轮换。同时需持续关注新的身份与访问管理(IAM)方案,将密码管理纳入整体运维体系。