ansible 一键改密
时间: 2025-02-21 10:14:46 浏览: 30
### 使用Ansible实现批量修改服务器密码
为了安全有效地使用Ansible来批量修改服务器上的用户密码,建议遵循最佳实践并采用Ansible Vault保护敏感数据。以下是具体方法:
#### 安全处理密码
当涉及更改多个系统的账户凭证时,务必利用`ansible-vault`命令工具对包含这些秘密信息的文件实施加密操作[^2]。
#### 创建用于存储新密码的YAML文件
建立一个名为`passwords.yml`的安全文档,在其中定义目标主机及其对应的新密码字符串,并通过Vault加以防护:
```yaml
all:
children:
webservers:
hosts:
web1.example.com:
user_password: "new_secure_pass_for_web1"
web2.example.com:
user_password: "another_strong_pass_for_web2"
```
此配置片段展示了针对不同Web服务器设定各自的管理员级登录口令的方式。
#### 编写Playbook执行密码更新任务
编写如下所示的任务清单(`change_passwords.yml`),它会读取上述受保护的数据源,并据此调整远程节点上的相应用户的认证凭据:
```yaml
---
- name: Change root password on all servers securely
hosts: all
become: yes
vars_files:
- passwords.yml
tasks:
- name: Update the specified user's password with a new value from vaulted file
user:
name: "{{ inventory_hostname }}"
password: "{{ 'user_password'|lookup('vars', '') }}"
update_password: always
state: present
```
这段剧本中的关键之处在于运用了`become`指令获取更高权限以及调用了`user`模块完成实际变更工作;同时借助于模板化表达式动态提取各台机器专属的秘密参数。
请注意,以上示例假设每台主机都有唯一的用户名作为其标识符(即与inventory hostname相同)。如果实际情况并非如此,则需适当调整逻辑以匹配具体的环境需求。
#### 加密和解密过程
创建好明文形式的`passwords.yml`之后,立即对其进行加密保存:
```bash
$ ansible-vault encrypt passwords.yml
Encryption successful
```
运行playbook前先解锁该资源以便正常访问内部条目:
```bash
$ ansible-playbook --ask-vault-pass change_passwords.yml
Vault password:
PLAY [Change root password on all servers securely] ******************************
TASK [Gathering Facts] ***********************************************************
ok: [web1.example.com]
ok: [web2.example.com]
...
```
阅读全文
相关推荐










