管理用户和用户属性是任何系统管理员的典型操作。Ansible的用户模块是管理用户和他们的属性的最方便的方法之一,当与远程主机工作时。
Ansible.buildin.user模块是ansible-core的一部分,在大多数ansible安装中默认是可用的。
在本指南中,我们将重点介绍如何使用ansible用户模块来管理用户账户。
Ansible用户模块如何工作
Ansible用户模块使用一系列的参数工作。每个参数都允许你自定义模块执行的动作,以及模块如何在远程主机上执行设定的动作。
下面是Ansible用户模块的一些重要参数。
- name:要创建、删除或修改的用户名
- password:为指定的用户设置一个密码。
- uid:设置一个定义的用户的UID。
- shell:设置用户的默认外壳。
- expires:设置以纪元时间表示的过期时间。
- generate_ssh_key:一个布尔值,设置是否应该为指定用户生成ssh-key对。
- create_home:布尔值。如果为真,在创建账户时为用户创建一个主目录。
- force:强制删除一个用户账户
- group: 定义一个指定用户的主要组别。
- state:决定一个账户是否应该存在:不存在或存在
说明如何使用Ansible用户模块的最好方法是使用实际例子。
Ansible用户模块实战案例
在本指南中,我们假设你有一个配置了远程主机清单的Ansible控制节点。
在进一步进行之前,先测试一下远程主机是否已经启动。
ansible all -m ping -v
如果所有的主机都已经启动,并且满足所有的要求,你应该看到一个类似于下面所示的输出。

例1:如何创建一个用户
为了在远程主机上创建一个用户,我们可以使用一个简单的playbook,比如下面例子中的那个。
---
- hosts: all
become: true
tasks:
- name: create user on remote host
ansible.builtin.user:
name: ansible_test
shell: /bin/bash
group: wheel
在上面的例子中,我们使用全名来调用用户模块。然而,你可以把它简称为 "user"
- name:指定要创建的目标用户的用户名
- shell:为该用户设置默认的外壳
- group:定义用户的主要组别
保存playbook,然后用命令运行。
ansible-playbook createuser.yml
例2:如何删除一个用户
我们可以通过设置状态为缺席和删除为真来删除一个远程用户。下面是一个playbook的例子。
---
- hosts: all
become: true
tasks:
- name: remove user
ansible.builtin.user:
name: ansible_test
state: absent
remove: true
在这个例子中,我们将状态设置为缺席。将删除参数设置为 "true "将删除用户的相关目录。
运行playbook。
ansible-playbook removeuser.yml

例3:如何设置密码到期日
假设我们想为一个用户的密码设置一个到期日。我们可以通过设置过期日期来做到这一点。
---
- hosts: all
become: true
tasks:
- name: set password expiration
ansible.builtin.user:
name: ansible_test
password_expire_min: 5
password_expire_max: 15
例4:如何为一个用户创建一个SSH密钥
要为一个远程用户生成SSH密钥对,我们可以使用generate_ssh_key参数,如下面的playbook中所示。
---
- hosts: all
tasks:
- name: generate ssh key
user:
name: ansible_test
generate_ssh_key: true
ssh_key_file: ~/.ssh/id_rsa
ssh_key_type: rsa
ssh_key_bits: 4096
例5:如何更新用户密码
为了更新一个用户的密码,我们将备份影子并生成密码的哈希值,如下面的游戏手册所示。
---
- hosts: all
become: true
tasks:
- name: backup shadow file
copy:
src: /etc/shadow
dest: /etc/shadow.bak
- name: update user password
user:
name: ansible_test
state: present
update_password: true
password: "{{ updatedpassword|password_hash('sha512') }}"
在上面的例子中,我们首先备份了影子文件。接下来,我们指定用户的新密码。
以下列方式运行playbook。
ansible-playbook updatepass.yml updatedpassword=<newpassword>
总结
本指南教你如何使用Ansible用户模块来管理用户和用户属性。