ansible批量修改linux服务器密码的核心是通过加密哈希值+user模块+提权机制实现安全操作,不传明文、不暴露密码、不依赖交互;需生成sha-512格式哈希(如$6$开头),配置主机清单与sudo权限,用playbook或ad-hoc命令安全更新。

Ansible 批量修改 Linux 服务器密码,核心在于不传明文、不暴露密码、不依赖交互。它通过加密密码哈希值 + user 模块 + 提权机制完成安全批量操作,不是简单 echo 或 chpasswd 脚本的翻版。
生成符合 Linux 标准的加密密码
Linux 的 /etc/shadow 使用 SHA-512($6$ 开头)或更安全的算法,Ansible 的 password_hash 过滤器或系统工具必须匹配这一格式:
- 推荐用 Ansible 内置方式(Playbook 中直接调用):
{{ 'MyNewPass@2026' | password_hash('sha512') }} - 命令行临时生成(控制节点执行):
openssl passwd -6 'MyNewPass@2026'
输出类似:$6$abc123$JxY9...(一长串哈希) - 备选:安装
whois后用mkpasswd --method=SHA-512,效果等同
配置主机清单与连接权限
确保 Ansible 能以普通用户 SSH 登录,并具备提权能力(避免 root 密码硬编码):
- 在 inventory 文件(如
hosts)中指定登录用户和提权方式:[webservers]<br>10.0.1.10<br>10.0.1.11<br><br>[webservers:vars]<br>ansible_user=deploy<br>ansible_become=yes<br>ansible_become_method=sudo<br>ansible_become_password=xxx # 若 sudo 需密码;若配置了 NOPASSWD 则可省略
- 目标机器上,该用户需在
wheel(RHEL/CentOS)或sudo(Ubuntu/Debian)组中
用 Playbook 安全更新用户密码
Playbook 是最可控、可复用、可审计的方式,支持变量分离与 Vault 加密:
- 创建
change_pwd.yml:- name: 批量更新管理员密码<br> hosts: webservers<br> become: true<br> gather_facts: false<br> vars:<br> target_user: "root"<br> new_hashed_pass: "$6$salt...(你生成的哈希)"<br> tasks:<br> - name: 设置 {{ target_user }} 密码<br> ansible.builtin.user:<br> name: "{{ target_user }}"<br> password: "{{ new_hashed_pass }}"<br> update_password: always - 敏感密码建议存入 Vault 加密文件:
ansible-vault create group_vars/all/vault.yml,写入:vault_new_password: "$6$...",再在 Playbook 中引用{{ vault_new_password }}
快速 ad-hoc 命令(适合一次性操作)
测试或紧急场景下,一行命令即可生效:
- 改所有主机的 root 密码(使用已生成的哈希):
ansible webservers -b -m user -a "name=root password=$6$salt$hash update_password=always" - 动态生成随机密码并应用(每台不同,需保存记录):
NEW_PASS=$(openssl rand -base64 12); ansible webservers -b -m user -a "name=root password={{ '$NEW_PASS' | password_hash('sha512') }}"











