4. 使用循环批量创建用户
任务目标
编写一个Ansible Playbook,从一个用户列表中循环读取用户名、密码和授权组,批量创建系统用户。每个用户需设置密码,并确保其加入指定的附加组(如wheel或sudo组)以获得提权能力。
前置条件
- 控制节点已安装Ansible 2.9+
- 目标主机为Linux系统,且控制节点可通过SSH免密登录
- 目标主机上
python或python3可用(Ansible依赖)
Playbook实现
创建文件create_users.yml,内容如下:
---
- name: 批量创建用户并设置密码与授权
hosts: all
become: yes
vars:
users:
- name: alice
password: "{{ 'alice123' | password_hash('sha512') }}"
groups: wheel
- name: bob
password: "{{ 'bob456' | password_hash('sha512') }}"
groups: wheel
- name: charlie
password: "{{ 'charlie789' | password_hash('sha512') }}"
groups: ""
tasks:
- name: 循环创建用户
ansible.builtin.user:
name: "{{ item.name }}"
password: "{{ item.password }}"
groups: "{{ item.groups }}"
append: yes
state: present
shell: /bin/bash
create_home: yes
loop: "{{ users }}"
loop_control:
label: "{{ item.name }}"
运行方式
ansible-playbook -i 你的主机清单 create_users.yml
若没有现成清单,可直接对本机执行验证:
ansible-playbook -i localhost, -c local create_users.yml
验证方法
Playbook执行完毕后,在目标主机上运行以下命令确认结果:
# 检查用户是否存在
id alice
id bob
id charlie
# 验证密码是否生效(需输入密码切换)
su - alice -c "whoami"
# 验证授权组
groups alice
groups bob
通过条件:
- 三个用户均存在,且home目录已创建
alice和bob属于wheel组(或你的sudo组),charlie无附加组- 使用设置的密码可以成功切换到对应用户
- Playbook执行结果中无
failed任务
关键说明
password_hash('sha512')过滤器在控制节点将明文密码转为加密哈希,避免明文传输append: yes确保用户原有附加组不被覆盖,仅追加新组- 若目标主机的sudo组不是
wheel(如Debian/Ubuntu为sudo),请修改groups值 - 生产环境中建议使用Ansible Vault加密密码变量,而非明文写入Playbook