使用Ansible安全批量修改Linux服务器密码的详细方案
作者:文心
Ansible通过user模块和加密工具可实现安全、高效的密码批量更新,核心步骤包括密码加密处理、Playbook编写和安全控制,本文介绍Ansible安全批量修改Linux服务器密码的详细方案,感兴趣的朋友跟随小编一起看看吧
在Linux服务器管理中,批量修改用户密码是重要的安全运维操作。Ansible通过user模块和加密工具可实现安全、高效的密码批量更新,核心步骤包括密码加密处理、Playbook编写和安全控制。
密码加密处理
生成SHA-512加密密码
在控制节点执行以下命令生成加密密码(需安装whois工具):
sudo apt-get install whois # Debian/Ubuntu mkpasswd --method=SHA-512 --stdin
输入明文密码后,输出类似$6$salt$encrypted的字符串,用于Playbook中的密码字段。
使用Ansible Vault加密敏感数据
# 创建加密变量文件 ansible-vault create secrets.yml
文件内容示例:
vault_target_user: admin vault_encrypted_pass: "$6$somesalt$encryptedhash"
执行Playbook时通过以下方式解密:
ansible-playbook change_password.yml --ask-vault-pass # 交互式输入密码 # 或 ansible-playbook change_password.yml --vault-password-file ~/.vault_pass # 使用密码文件
Playbook实现方案
方案1:批量修改多用户密码(静态列表)
---
- name: 安全修改用户密码
hosts: linux_servers
become: true
vars_files:
- secrets.yml # 加载加密变量
tasks:
- name: 验证目标用户存在
ansible.builtin.command: "getent passwd {{ vault_target_user }}"
register: user_check
ignore_errors: true
changed_when: false
- name: 更新用户密码
ansible.builtin.user:
name: "{{ vault_target_user }}"
password: "{{ vault_encrypted_pass }}"
update_password: always
when: user_check.rc == 0方案2:动态传递参数(单用户修改)
---
- name: 修改单个用户密码
hosts: all
become: true
tasks:
- name: 动态设置密码
user:
name: "{{ target_user | default('root') }}"
password: "{{ new_pass | password_hash('sha512') }}"
update_password: always执行命令:
ansible-playbook single_user_change.yml -e "target_user=ubuntu new_pass=Secure@123"
关键安全控制
文件系统权限
chmod 600 secrets.yml # 仅所有者可读 chown ansible-runner secrets.yml # 限制为特定用户
执行权限控制(sudo)
在/etc/sudoers中配置:
ansible-runner ALL=(root) NOPASSWD: /usr/bin/ansible-playbook change_password.yml
生产环境最佳实践
密码轮换策略
每次执行生成新salt值:
import secrets salt = secrets.token_hex(8) # 生成16字符随机salt
定期更新vault密码:
ansible-vault rekey secrets.yml
审计与监控
启用Ansible日志:
[defaults] log_path = /var/log/ansible.log
使用--check模式预演变更:
ansible-playbook change_password.yml --check --diff
灰度发布
- 先在小规模主机组测试:
ansible-playbook change_password.yml --limit staging_servers
补充:以下为AI生成在Linux批量修改服务器用户密码的方法,供大家参考!
Linux批量修改服务器用户密码的方法
我来介绍几种在Linux批量修改服务器用户密码的方法:
方法1:使用 chpasswd 命令(推荐)
准备密码文件
创建 passwords.txt 文件,格式为 用户名:密码
user1:NewPass123! user2:NewPass456! user3:NewPass789!
批量修改
# 作为root用户执行 cat passwords.txt | chpasswd # 或者加密方式(更安全) cat passwords.txt | chpasswd -c SHA512
方法2:使用 passwd 和循环
从文件读取用户和新密码
#!/bin/bash
while IFS=: read -r user pass; do
echo "$user:$pass" | chpasswd
echo "用户 $user 密码已修改"
done < passwords.txt方法3:批量生成随机密码
#!/bin/bash
# 为指定用户批量生成随机密码
USERS="user1 user2 user3"
for user in $USERS; do
# 生成12位随机密码
newpass=$(openssl rand -base64 12)
echo "$user:$newpass" | chpasswd
echo "用户: $user, 新密码: $newpass" >> newpasswords.txt
done方法4:使用 expect 实现交互式修改
#!/usr/bin/expect -f
set f [open "userlist.txt" r]
while {[gets $f line] != -1} {
set user [lindex $line 0]
set pass [lindex $line 1]
spawn passwd $user
expect "新的密码:"
send "$pass\r"
expect "重新输入新的密码:"
send "$pass\r"
expect eof
}
close $f方法5:通过SSH批量修改多台服务器
#!/bin/bash
# 需要在多台服务器上批量修改
SERVER_LIST="server1 server2 server3"
USERNAME="root"
NEW_PASS="CommonNewPass123!"
for server in $SERVER_LIST; do
ssh $USERNAME@$server "echo '$USERNAME:$NEW_PASS' | chpasswd"
if [ $? -eq 0 ]; then
echo "$server: 密码修改成功"
else
echo "$server: 密码修改失败"
fi
done安全注意事项
1. 密码文件安全处理
# 创建密码文件后设置权限 chmod 600 passwords.txt chown root:root passwords.txt # 使用后立即删除或加密存储 shred -u passwords.txt
2. 使用加密传输
# 通过SSL加密传输密码文件 scp encrypted_passwords.txt user@server:/tmp/
3. 验证密码复杂度
#!/bin/bash
# 密码复杂度验证脚本
check_password() {
local pass=$1
if [[ ${#pass} -lt 8 ]]; then
echo "密码长度至少8位"
return 1
fi
if ! [[ "$pass" =~ [A-Z] ]]; then
echo "密码需要包含大写字母"
return 1
fi
if ! [[ "$pass" =~ [a-z] ]]; then
echo "密码需要包含小写字母"
return 1
fi
if ! [[ "$pass" =~ [0-9] ]]; then
echo "密码需要包含数字"
return 1
fi
return 0
}完整示例脚本
#!/bin/bash
# batch_change_passwords.sh - 批量修改用户密码脚本
# 配置
USER_LIST_FILE="users.txt" # 格式:用户名
PASSWORD_FILE="passwords.txt" # 格式:用户名:密码
LOG_FILE="password_change.log"
# 检查root权限
if [ "$EUID" -ne 0 ]; then
echo "请以root用户运行此脚本"
exit 1
fi
# 生成随机密码的函数
generate_random_pass() {
openssl rand -base64 12 | tr -d "=/+" | cut -c1-12
}
# 方法1:从文件读取已有密码
batch_change_from_file() {
echo "开始批量修改密码..." | tee -a $LOG_FILE
while IFS=: read -r user pass; do
if id "$user" &>/dev/null; then
echo "$user:$pass" | chpasswd
if [ $? -eq 0 ]; then
echo "$(date): 用户 $user 密码修改成功" >> $LOG_FILE
else
echo "$(date): 用户 $user 密码修改失败" >> $LOG_FILE
fi
else
echo "$(date): 用户 $user 不存在" >> $LOG_FILE
fi
done < $PASSWORD_FILE
}
# 方法2:为用户生成随机密码
batch_generate_random() {
echo "生成随机密码..." | tee -a $LOG_FILE
> new_passwords.txt
while read user; do
if id "$user" &>/dev/null; then
newpass=$(generate_random_pass)
echo "$user:$newpass" | chpasswd
echo "$user: $newpass" >> new_passwords.txt
echo "$(date): 用户 $user 密码已生成" >> $LOG_FILE
fi
done < $USER_LIST_FILE
echo "新密码已保存到 new_passwords.txt"
chmod 600 new_passwords.txt
}
# 主菜单
echo "请选择操作:"
echo "1. 使用预定义密码文件修改"
echo "2. 为用户生成随机密码"
read -p "选择 (1/2): " choice
case $choice in
1)
if [ -f "$PASSWORD_FILE" ]; then
batch_change_from_file
else
echo "密码文件 $PASSWORD_FILE 不存在"
exit 1
fi
;;
2)
if [ -f "$USER_LIST_FILE" ]; then
batch_generate_random
else
echo "用户列表文件 $USER_LIST_FILE 不存在"
exit 1
fi
;;
*)
echo "无效选择"
exit 1
;;
esac
echo "操作完成!日志保存在 $LOG_FILE"这个脚本提供了灵活的批量密码修改方案,可以根据实际需求选择合适的实现方式。
到此这篇关于Ansible安全批量修改Linux服务器密码的完整方案的文章就介绍到这了,更多相关Linux批量修改服务器用户密码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
