Ansible 通过 user 模块实现远程用户账号的批量、幂等管理,依赖 SSH 和 Python 环境,无需客户端;需提前配置免密登录、提权权限及 Python3;支持 ad-hoc 命令快速操作和 Playbook 统一管控,并强调密码加密、group/groups 区分及 home 目录处理等关键细节。

Ansible 管理远程系统用户账号,核心是使用 user 模块,通过 ad-hoc 命令或 Playbook 实现批量、幂等、可重复的账号操作。整个过程不依赖客户端,只需 SSH 连通和 Python 环境即可。
配置前提:确保通信与权限就绪
在执行用户管理前,需完成以下基础准备:
- 控制节点已安装 Ansible(如
yum install -y ansible或apt install -y ansible) - 被控节点已开启 SSH 服务,且控制节点能免密登录(用
ssh-copy-id user@host配置) - 若需创建/修改 root 权限相关账号(如设置密码、加入 sudo 组),建议在任务中启用
become: true(即提权),并确保目标用户有 sudo 权限 - 被控节点需安装
python3(CentOS 8+/RHEL 8+ 默认满足;老系统可补装python3-pip或确认/usr/bin/python3可用)
常用用户操作:ad-hoc 命令快速上手
直接在命令行运行,适合临时调整。注意:密码需用加密格式(非明文),推荐用 mkpasswd --method=sha-512 或 Python 的 passlib 生成。
-
创建普通用户(无密码登录):
ansible webservers -m user -a "name=john state=present" -
创建带密码的用户(SHA-512 加密):
ansible webservers -m user -a "name=alice password='$6$rounds=656000$abc...xyz' state=present" -
添加用户到附加组(如 wheel 或 docker):
ansible dbs -m user -a "name=bob groups=wheel,docker append=yes"(append=yes表示保留原有组) -
禁用用户登录(锁定密码):
ansible all -m user -a "name=devops state=present shell=/sbin/nologin" -
删除用户及主目录:
ansible nodes -m user -a "name=testuser state=absent remove=yes"
生产级写法:Playbook 统一管控用户生命周期
把用户策略固化为 YAML 文件,便于版本管理、复用和审计。例如 manage_users.yml:
---
- name: 批量管理运维账号
hosts: production
become: true
vars:
admin_users:
- { name: "ops01", pass_hash: "$6$...", groups: ["wheel"] }
- { name: "sec01", pass_hash: "$6$...", groups: ["adm", "syslog"] }
tasks:
- name: 创建管理员账号
user:
name: "{{ item.name }}"
password: "{{ item.pass_hash }}"
groups: "{{ item.groups }}"
append: true
shell: /bin/bash
state: present
loop: "{{ admin_users }}"
<pre class="brush:php;toolbar:false;">- name: 禁用默认 test 用户
user:
name: test
state: absent
执行命令:ansible-playbook manage_users.yml
关键细节与避坑提示
用户管理看似简单,但几个细节直接影响结果可靠性:
-
密码必须加密:Ansible 不接受明文密码。Linux 系统密码字段只识别加密串。可用命令生成:
python3 -c "from passlib.hash import sha512_crypt; print(sha512_crypt.hash('mypwd'))" -
group vs groups 区别:
group指定主组(会覆盖原主组),groups指定附加组(配合append=yes才安全追加) -
home 目录处理:新建用户默认创建
/home/xxx;若用create_home: false,需手动处理路径和权限 -
幂等性保障:user 模块天然幂等——重复运行不会重建用户、重置密码(除非显式指定
update_password: always),适合定时巡检或 CI/CD 流水线


















