Ansible user
模块
一、简介
- 功能:
user
模块用于管理远程主机上的用户账户。它可以创建、修改或删除用户,以及设置用户的密码、权限、用户组等属性。 - 使用场景:常用于自动化管理用户账户,如在多个服务器上批量创建新用户、修改用户密码或删除不需要的用户账户。
二、基本用法
2.1 语法
ansible <pattern> -m user -a "name=<username> state=<state> [other options]"
<pattern>
:指定要操作的主机或主机组,例如all
、webservers
。-m user
:指定使用user
模块。name=<username>
:指定要管理的用户账户名称。state=<state>
:指定用户账户的目标状态,如present
、absent
。
2.2 常见 state
参数
present
:确保用户账户存在。如果不存在,则创建它。absent
:确保用户账户不存在。如果存在,则删除它。
三、使用示例
3.1 创建用户账户
ansible all -m user -a "name=johndoe state=present"
- 解释:在所有主机上创建名为
johndoe
的用户。如果用户已经存在,不做任何更改。
3.2 删除用户账户
ansible all -m user -a "name=johndoe state=absent"
- 解释:在所有主机上删除名为
johndoe
的用户账户。如果用户不存在,不做任何操作。
3.3 创建用户并设置密码
ansible all -m user -a "name=johndoe password='<hashed_password>'"
- 解释:在所有主机上创建名为
johndoe
的用户,并设置密码。注意,密码必须是经过加密处理的哈希值(通常通过openssl passwd
生成)。
3.4 创建用户并将其添加到组
ansible all -m user -a "name=johndoe groups=developers"
- 解释:在所有主机上创建名为
johndoe
的用户,并将其添加到developers
组。如果组不存在,可能会导致错误,建议确保组存在或使用group
模块先创建组。
3.5 添加用户到多个组并设置为附加组
ansible all -m user -a "name=johndoe groups=developers,admins append=yes"
- 解释:在所有主机上将
johndoe
用户添加到developers
和admins
组,同时保留用户现有的组成员身份。
3.6 创建用户并设置其家目录
ansible all -m user -a "name=johndoe home=/home/johndoe createhome=yes"
- 解释:在所有主机上创建名为
johndoe
的用户,并设置其家目录为/home/johndoe
。如果createhome=yes
,则会自动创建家目录。
四、其他常用选项
4.1 password
-
功能:设置用户的密码。密码必须是加密后的哈希值,可以使用
openssl passwd
生成。 -
用法:
ansible all -m user -a "name=johndoe password='<hashed_password>'"
- 解释:为
johndoe
用户设置指定的加密密码。
- 解释:为
4.2 groups
-
功能:指定用户所属的组,可以是单个组或逗号分隔的多个组。
-
用法:
ansible all -m user -a "name=johndoe groups=wheel,developers"
- 解释:将
johndoe
用户添加到wheel
和developers
组。
- 解释:将
4.3 append
-
功能:控制是否将用户添加到新组时保留其现有的组成员身份。默认情况下,用户会被移除出所有未列出的组。
-
用法:
ansible all -m user -a "name=johndoe groups=admins append=yes"
- 解释:将
johndoe
用户添加到admins
组,并保留其现有的组成员身份。
- 解释:将
4.4 home
-
功能:设置用户的家目录路径。
-
用法:
ansible all -m user -a "name=johndoe home=/custom/home/johndoe createhome=yes"
- 解释:设置
johndoe
用户的家目录为/custom/home/johndoe
,并创建该目录。
- 解释:设置
4.5 shell
-
功能:设置用户的默认登录 shell。
-
用法:
ansible all -m user -a "name=johndoe shell=/bin/bash"
- 解释:设置
johndoe
用户的默认 shell 为/bin/bash
。
- 解释:设置
4.6 remove
-
功能:在删除用户时,是否同时删除用户的家目录和邮件文件。默认情况下,删除用户不会删除这些文件。
-
用法:
ansible all -m user -a "name=johndoe state=absent remove=yes"
- 解释:删除
johndoe
用户,并同时删除其家目录和邮件文件。
- 解释:删除
五、注意事项
- 密码管理:设置用户密码时,确保使用加密的哈希值,而不是明文密码。可以使用
openssl passwd
工具生成加密后的密码。 - 组管理:使用
groups
选项时,注意现有的组成员身份是否需要保留。如果需要保留,请使用append=yes
选项。 - 用户安全:在自动化管理用户账户时,确保用户的权限设置符合组织的安全策略,特别是在生产环境中。