如何使用ansible用户模块来管理用户账户

636 阅读3分钟

管理用户和用户属性是任何系统管理员的典型操作。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"

  1. name:指定要创建的目标用户的用户名
  2. shell:为该用户设置默认的外壳
  3. 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用户模块来管理用户和用户属性。