Если вы используете Ansible user module для управления пользователями в системах Linux или Unix, зашифрованный пароль необходим для установки пароля для пользователя без использования запроса.
В системах MacOS значение параметра пароля должно быть открытым текстом.
В этом руководстве будет показано, как создать зашифрованный пароль пользователя Linux для использования user module Ansible.
Существуют различные способы создания хешированного пароля пользователя в системе 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:
$6$/1OFlW9yH1KHHiOm$pn2SfNgbF/rbblahjseab/p1Xb6Z29UZik.BUilZ.TLnp9yvl2HViB3fs8XdVteboeioss7o2A4g1IYxw.TFJ/
Генерация зашифрованного пароля с 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
Вы также можете использовать утилиту mkpasswd, которая доступна в большинстве систем Linux, для генерации захешированного пароля.
Установите 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 }}"
Выполните плейбук, чтобы создать пользователя.
$ ansible-playbook user_create.yml --user=itsecforu --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
В Debian like операционных системах mkpasswd является частью пакета whois и не поставляется в качестве отдельного пакета. Поправьте, пожалуйста:
sudo apt install mkpasswd
надо заменить на
sudo apt install whois
Также нашел опечатку – две буквы ее вместо одной:
sudo apt updatee
Спасибо за дополнение, опечатку поправили