如何为 Ansible 生成 Linux 用户加密密码 |如何为 Ansible 生成 Linux 用户加密密码 |如何为 Ansible 生成 Linux 用户加密密码 |如何为 Ansible 生成 Linux 用户加密密码 |
  • 业务
  • 目标
  • 支持
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容

如何为 Ansible 生成 Linux 用户加密密码 |

发表 admin at 2025年2月28日
类别
  • 未分类
标签

如果您在 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 集群
©2015-2025 Norria support@norria.com