如何为 Ansible 生成 Linux 用户加密密码 |
如果您在 Linux 或 Unix 系统上使用 Ansible 用户模块进行用户管理,则需要加密密码才能在不使用提示的情况下为用户设置密码。在 macOS 系统上,密码参数值的值必须是明文。本指南将演示如何生成 Linux 用户加密密码以与 Ansible 用户模块一起使用。
在 Linux 系统上生成哈希用户密码的方法有多种。其中一种方法是使用python,另一种方法涉及使用mkpasswd命令行实用程序,等等。
使用Python3生成加密密码
要生成哈希,您的系统上必须有 python3
包。根据您的操作系统,可以使用以下命令来安装软件包。
### CentOS ###
sudo yum -y install epel-release
sudo yum -y install python3 python3-bcrypt
### Ubuntu / Debian ###
sudo apt update
sudo apt install python3 python3-bcrypt
要生成哈希值,请使用如下命令:
python3 -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'
它会要求您输入并确认密码:
Password:
Confirm:
$6$/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:
$6$4QSwvTfs5ijeRo6V$qAgug/HU1WUe7e/s5c6H0HQDCb4QnOumJ6bgxyykiKgewNTr/ifF5yUBq7taNZ0eJAqrXXXwzvxd9ewgq9XHI0
使用 mkpasswd 生成加密密码
您还可以使用大多数 Linux 系统上提供的 mkpasswd 实用程序来生成哈希密码。
安装 mkpasswd:
### Ubuntu / Debian ###
sudo apt update
sudo apt install mkpasswd
### CentOS / Fedora ###
sudo yum install expect
生成密码:
$ mkpasswd --method=sha-512
Password:
$6$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:
$6$pTpaEDHweswcO86u$MuAiSx/iHxmV2jSvmNzXQYIz1lYIMCeP5KtmZQnx6mgJVfweP6oC8nMQQ9QeLc821YV50fh6yMzOjUCxY0lIq.
创建用户创建手册。
vim user_create.yml
添加 :
---
- name: Create demo user
hosts: localhost
become: yes
become_method: sudo
vars:
users:
- username: demo
password: $6$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': '$6$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 may want to try out the Toolbox for a directly
mutable environment that allows package installation with DNF.
For more information, see the documentation.
[demo@fed ~]$
删除用户:
$ sudo userdel -r demo
$ id demo
id: ‘demo’: no such user
这就是如何为 Ansible 生成加密的 Linux 用户密码。
更多关于 Ansible 的内容:
- 学习 Docker 和 Ansible 自动化的最佳书籍
- 使用 Vagrant up 运行 Ansible Playbook
- 使用 Ansible 和 Calico CNI 在 CentOS 7/CentOS 8 上部署 Kubernetes 集群
- Ansible Vault 备忘单/参考指南
- 如何使用 Ansible 自动执行简单的重复性任务
- 使用 Ansible 和 Kubespray 部署生产就绪 Kubernetes 集群