目录
user
模块用于管理系统用户,可以创建、删除、修改用户属性。它提供了一个统一的方法来保证用户账户的存在或不存在,以及其他相关的设置,比如密码、组、home 目录等等。以下是一些常见操作和语法总结:
参数总结
name
:- 描述:要管理的用户的名称。
- 类型:字符串
- 必需:是
state
:- 描述:用户的目标状态。
- 可选值:
present
:确保用户存在absent
:确保用户不存在
- 类型:字符串
- 默认值:
present
uid
:- 描述:设置用户的 UID。
- 类型:整数
gid
:- 描述:设置用户的主要 GID 或组名。
- 类型:整数或字符串
groups
:- 描述:设置用户所属的附加组(以逗号分隔)。
- 类型:字符串
password
:- 描述:设置用户的密码(加密格式)。
- 类型:字符串
update_password
:- 描述:控制用户密码的更新策略。
- 可选值:
always
:总是更新密码on_create
:仅在用户创建时设置密码
- 类型:字符串
- 默认值:
always
shell
:- 描述:设置用户的登录 shell。
- 类型:字符串
home
:- 描述:设置用户的 home 目录路径。
- 类型:字符串
createhome
:- 描述:如果为
yes
,则创建用户的 home 目录。 - 类型:布尔值
- 默认值:
yes
- 描述:如果为
system
:- 描述:如果为
yes
,则创建系统用户。 - 类型:布尔值
- 默认值:
no
- 描述:如果为
move_home
:- 描述:如果为
yes
,则移动用户的 home 目录到新位置。 - 类型:布尔值
- 默认值:
no
- 描述:如果为
non_unique
:- 描述:如果为
yes
,则允许创建重复的 UID。 - 类型:布尔值
- 默认值:
no
- 描述:如果为
remove
:- 描述:如果为
yes
,则删除用户及其 home 目录和邮件目录。 - 类型:布尔值
- 默认值:
no
- 描述:如果为
force
:- 描述:如果为
yes
,则强制删除用户,即使用户当前已登录。 - 类型:布尔值
- 默认值:
no
- 描述:如果为
comment
:- 描述:设置用户的 GECOS 字段(全名或备注)。
- 类型:字符串
seuser
:- 描述:设置用户的 SELinux 用户。
- 类型:字符串
generate_ssh_key
:- 描述:如果为
yes
,则为用户生成 SSH 密钥。 - 类型:布尔值
- 默认值:
no
- 描述:如果为
ssh_key_bits
:- 描述:设置 SSH 密钥的位数(与
generate_ssh_key
一起使用)。 - 类型:整数
- 默认值:
2048
- 描述:设置 SSH 密钥的位数(与
ssh_key_comment
:- 描述:设置 SSH 密钥的注释(与
generate_ssh_key
一起使用)。 - 类型:字符串
- 默认值:用户名@主机名
- 描述:设置 SSH 密钥的注释(与
ssh_key_file
:- 描述:设置生成的 SSH 密钥文件的路径(与
generate_ssh_key
一起使用)。 - 类型:字符串
- 默认值:
~/.ssh/id_rsa
- 描述:设置生成的 SSH 密钥文件的路径(与
ssh_key_passphrase
:- 描述:设置 SSH 密钥的密码(与
generate_ssh_key
一起使用)。 - 类型:字符串
- 描述:设置 SSH 密钥的密码(与
ssh_key_type
:- 描述:设置 SSH 密钥的类型(与
generate_ssh_key
一起使用)。 - 可选值:
rsa
、dsa
、ecdsa
、ed25519
- 类型:字符串
- 默认值:
rsa
- 描述:设置 SSH 密钥的类型(与
语法示例
1. 创建用户
创建一个名为 john
的用户:
ansible all -m user -a "name=john state=present"
2. 删除用户
删除名为 john
的用户:
ansible all -m user -a "name=john state=absent"
3. 修改用户属性
创建用户 jane
并为其设置特定属性:
ansible all -m user -a "name=jane comment='Jane Doe' uid=1042 group=admin home=/home/jane shell=/bin/bash password='{{ ''password'' | password_hash(''sha512'') }}'"
(注意:此命令中密码部分需要特定的处理,最好在 Playbook 中使用而不是在命令行直接敲)
4. 锁定用户账户
锁定名为 john
的用户账户:
ansible all -m user -a "name=john password_lock=yes"
5. 解锁用户账户
解锁名为 john
的用户账户:
ansible all -m user -a "name=john password_lock=no"
6. 添加用户到多个组
将用户 jane
添加到多个组:
ansible all -m user -a "name=jane groups=wheel,staff append=yes"
7. 修改或创建用户,并设置密码
注意密码应当进行加密处理,通常通过变量传递:
ansible all -m user -a "name=jane password='<encrypted_password>'"
访问命令行帮助
查看 user
模块的所有选项和参数,可以使用以下命令:
ansible-doc -s user
Playbook示例
1. 创建用户
创建一个名为 john
的用户:
---
- name: Ensure user 'john' is created
hosts: all
tasks:
- name: Create a user 'john'
user:
name: john
state: present
2. 删除用户
删除名为 john
的用户及其 home 目录:
---
- name: Ensure user 'john' is removed
hosts: all
tasks:
- name: Delete user 'john'
user:
name: john
state: absent
remove: yes
3. 修改用户属性
创建用户 jane
并设置其属性:
---
- name: Ensure user 'jane' is created with specific attributes
hosts: all
tasks:
- name: Create user 'jane' with specific attributes
user:
name: jane
comment: "Jane Doe"
uid: 1042
group: admin
groups: "wheel,staff"
home: /home/jane
shell: /bin/bash
password: "{{ 'password' | password_hash('sha512') }}"
4. 锁定和解锁用户账户
锁定用户 john
的账户:
---
- name: Ensure user 'john' is locked
hosts: all
tasks:
- name: Lock user 'john' account
user:
name: john
password_lock: yes
解锁用户 john
的账户:
---
- name: Ensure user 'john' is unlocked
hosts: all
tasks:
- name: Unlock user 'john' account
user:
name: john
password_lock: no
5. 添加用户到多个组
将用户 jane
添加到多个组:
---
- name: Ensure user 'jane' is a member of multiple groups
hosts: all
tasks:
- name: Add user 'jane' to multiple groups
user:
name: jane
groups: "wheel,staff"
append: yes
6. 设置 SSH 公钥
为用户 jane
设置 SSH 公钥:
---
- name: Set SSH public key for user 'jane'
hosts: all
tasks:
- name: Ensure user 'jane' has an SSH key
authorized_key:
user: jane
state: present
key: "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAr..."
综合示例
综合示例,展示了如何在同一 Playbook 中执行多种用户管理操作:
---
- name: Manage multiple users
hosts: all
tasks:
- name: Ensure user 'john' exists with specific attributes
user:
name: john
comment: "John Doe"
uid: 1001
group: developers
groups: "devops"
home: /home/john
shell: /bin/bash
state: present
- name: Ensure user 'jane' exists with specific attributes
user:
name: jane
comment: "Jane Doe"
uid: 1002
group: developers
groups: "devops,sysadmins"
home: /home/jane
shell: /bin/zsh
state: present
- name: Ensure user 'jim' is removed
user:
name: jim
state: absent
- name: Lock user 'bob' account
user:
name: bob
password_lock: yes
- name: Configure authorized key for user 'john'
authorized_key:
user: john
state: present
key: "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAr4..."