如何为ansible生成Linux用户加密密码

时间:2020-02-23 14:29:38  来源:igfitidea点击:

如果我们在Linux或者UNIX系统上使用Ansible用户模块进行用户管理,则在不使用提示的情况下为用户设置密码需要加密密码。
在MacOS系统上,密码参数值的值必须是Cleartext。
本教程将演示如何生成与Ansible用户模块一起使用的Linux用户加密密码。

有各种方式可以在Linux系统上生成哈希用户密码。
其中一种方法是使用Python,另一个方法涉及使用MKPasswd命令行实用程序以及许多其他方法。

使用python3生成加密密码

要生成哈希,你必须拥有 python3包装在系统上。
可以使用以下命令来安装包根据操作系统。

--- CentOS --
$sudo yum -y install epel-release
$sudo yum install python3
--- Ubuntu/Debian --
sudo apt update
sudo apt install python3

要生成哈希,请使用以下命令:

python3 -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'

它会要求我们输入和确认密码:

Password: 
Confirm: 
$/1OFlW9yH1KHHiOm$pn2SfNgbF/rbblahjseab/p1Xb6Z29UZik.BUilZ.TLnp9yvl2HViB3fs8XdVteboeioss7o2A4g1IYxw.TFJ/

然后,我们将在使用用户Python模块时使用将加密的密码作为值打印为密码参数。

使用python2生成加密密码

如果使用Python2,例如CentOS 7服务器,请先安装PIP。

sudo yum -y install python-pip

然后,确保已安装PassLib密码散列库:

sudo pip install passlib

使用命令生成加密密码:

python -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'

与以前一样的

Password: 
Confirm: 
QSwvTfs5ijeRo6V$qAgug/HU1WUe7e/s5c6H0HQDCb4QnOumJ6bgxyykiKgewNTr/ifF5yUBq7taNZ0eJAqrXXXwzvxd9ewgq9XHI0

使用mkpasswd生成加密密码

我们还可以使用大多数Linux系统上提供的MKPassWD实用程序来生成散列密码。

安装mkpasswd:

--- Ubuntu/Debian --
$sudo apt updatee
$sudo apt install mkpasswd
--- CentOS/Fedora --
sudo yum install expect

生成密码:

$mkpasswd --method=sha-512
Password: 
$ieMLxPFShvi6rao9$XEAU9ZDvnPtL.sDuSdRi6M79sgD9254b/0wZvftBNvMOjj3pHJBCIe04x2M.JA7gZ7MwpBWat1t4WQDFziZPw1

测试生成的加密密码

我们可以创建具有加密密码的用户,并确认我们可以使用生成的密码登录。

$python3 -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'
Password: 
Confirm: 
$pTpaEDHweswcO86u$MuAiSx/iHxmV2jSvmNzXQYIz1lYIMCeP5KtmZQnx6mgJVfweP6oC8nMQQ9QeLc821YV50fh6yMzOjUCxY0lIq.

创建用户创建播放册。

$vim user_create.yml

添加:

--
- name: Create demo user
  hosts: localhost
  become: yes
  become_method: sudo
  vars:
    users:
    - username: demo
      password: $pTpaEDHweswcO86u$MuAiSx/iHxmV2jSvmNzXQYIz1lYIMCeP5KtmZQnx6mgJVfweP6oC8nMQQ9QeLc821YV50fh6yMzOjUCxY0lIq.
  tasks:
    - name: Create user demo
      user:
          name: "{{ item.username }}"
          shell: /bin/bash
          createhome: yes
          group: wheel
          generate_ssh_key: yes
          ssh_key_bits: 2048
          password: "{{ item.password }}"
          update_password: always
      with_items: "{{ users }}"

执行PlayBook以创建用户。

$ansible-playbook user_create.yml --user=jkmutai --ask-pass --ask-become-pass 
SSH password: 
BECOME password[defaults to SSH password]: 
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
PLAY [Create demo user] ** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **
TASK [Gathering Facts] ** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ***
ok: [localhost]
TASK [Create user demo] ** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **
changed: [localhost] => (item={'username': 'demo', 'password': '$pTpaEDHweswcO86u$MuAiSx/iHxmV2jSvmNzXQYIz1lYIMCeP5KtmZQnx6mgJVfweP6oC8nMQQ9QeLc821YV50fh6yMzOjUCxY0lIq.'})
PLAY RECAP ** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ***
localhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

确认用户已创建。

$getent passwd demo 
demo:x:1002:10::/var/home/demo:/bin/bash

切换到用户以确认加密密码正在运行。

$su - demo
Password: 
Welcome to Fedora Silverblue. This terminal is running on the
host system. You Jan want to try out the Toolbox for a directly
mutable environment that allows package installation with DNF.
For more information, see the documentation.
[Hyman@theitroad ~]$

删除用户:

$sudo userdel -r demo
$id demo           
id: ‘demo’: no such user