Ansible это как создать пользователя
Перейти к содержимому

Ansible это как создать пользователя

  • автор:

Ansible — Создание пользователя

На самом деле тут ничего такого сложного чтобы об этом писать. Но вот можно по невнимательности наступить на грабли.

Суть в том, что при использовании модуля user пароль задаётся через переменную password. Но есть одно, но, хоть в типе и написано string если вы создаёте пользователя на linux то значение нужно шифровать.

Т.е. если вы просто напишите так, как снизу то работать это не будет.

 - name: Add user user: name: user password: "123456" 

Да, задача выполниться успешно и даже создастся пользователь, но вот зайти в систему под ним вы не сможете. А в логах будет сверкать запись: pam_sss(sshd:auth): received for user : 10 (User not known to the underlying authentication module)

Как правильно?

Правильный вариант создания пользователя с указанием пароля выглядит так (пароль 123456 не безопасный):

 - name: Add user user: name: user password: " < < pwd | password_hash('sha512') >>" vars: pwd: "123456" 

Поделиться: Twitter Facebook
Пожалуйста подпишитесь: Telegram Youtube

Ynwasg

О Ynwasg

Когда-то я тоже был обычным эникейщиком, который ходил и включал мониторы, когда пользователь паниковал что у него комп не включается. Но в своё время мне это надоело, и я пошёл дальше.

Добавление пользователя и publickey на удаленные сервера с помощью Ansible

В этой статье хочу рассказать как с помощью Ansible добавить на удаленные сервера пользователя с правами sudo, а так же публичный ключ, чтобы в дальнейшем каждый раз не вводить пароли для подключения к серверам по SSH.

Сначала установим и сконфигурируем Ansible, затем добавим удаленный хост, а после этого сгенерируем RSA-ключи, напишем плейбук и задеплоим их на удаленный сервер.

Все нижеописанное гарантированно работает c такой конфигурацией:

[root@centos-2gb-nbg-vpn ~]# cat /etc/*-release CentOS Linux release 7.7.1908 (Core) NAME="CentOS Linux" VERSION="7 (Core)" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="7" PRETTY_NAME="CentOS Linux 7 (Core)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:centos:centos:7" HOME_URL="https://www.centos.org/" BUG_REPORT_URL="https://bugs.centos.org/"
[root@centos-2gb-nbg-vpn ~]# ansible --version ansible 2.9.3 config file = /etc/ansible/ansible.cfg configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python2.7/site-packages/ansible executable location = /usr/bin/ansible python version = 2.7.5 (default, Aug 7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]

Установка Ansible

Обновим CentOS 7.

yum update -y

Установим Ansible.

yum install ansible -y

Конфигурирование Ansible

Создадим пользователя lnxcfg, который будет использоваться для управления удаленными серверами.

groupadd -g 2002 lnxcfg useradd -u 2002 -g 2002 -c "Ansible Automation Account" -s /bin/bash -m -d /home/lnxcfg lnxcfg

Дадим ему права sudo, а так же зададим пароль.

usermod -aG wheel lnxcfg passwd lnxcfg

И наконец, залогинимся под lnxcfg.

[root@centos-2gb-nbg-vpn ansible]# su - lnxcfg Last login: Mon Feb 17 09:59:58 +10 2020 on pts/1

Далее все действия будем производить под lnxcfg

Добавьте в файл /etc/hosts адрес удаленного хоста, к которому мы будем применять плейбуки.

В моём случае выглядит это так (94.130.xx.xx centos-2gb-nbg-webserver1).

# Your system has configured 'manage_etc_hosts' as True. # As a result, if you wish for changes to this file to persist # then you will need to either # a.) make changes to the master file in /etc/cloud/templates/hosts.redhat.tmpl # b.) change or remove the value of 'manage_etc_hosts' in # /etc/cloud/cloud.cfg or cloud-config from user-data # # The following lines are desirable for IPv4 capable hosts 127.0.0.1 centos-2gb-nbg-vpn 127.0.0.1 localhost.localdomain localhost 127.0.0.1 localhost4.localdomain4 localhost4 # The following lines are desirable for IPv6 capable hosts ::1 centos-2gb-nbg1-2 centos-2gb-nbg1-2 ::1 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 94.130.xx.xx centos-2gb-nbg-webserver1

Теперь создайте файл с именем inventory в /home/lnxcfg, в котором будут храниться имена хостов (клиентов) Ansible и добавьте удаленный хост.

[webservers] centos-2gb-nbg-webserver1

Файл конфигурации Ansible находится в /etc/ansible/ansible.cfg. Чтобы переопределить конфигурацию Ansible, мы можем создать файл .ansible.cfg, расположенный в /home/lnxcfg.

Создайте файл .ansible.cfg и добавьте в него.

[defaults] inventory = /home/lnxcfg/inventory host_key_checking = False
  • inventory = /home/lnxcfg/inventory позволит нам определить инвентаризацию Ansible клиентской системы в локальном домашнем каталоге lnxcfg.
  • host_key_checking = False запретит Ansible делать запрос на добавление клиентского сервера в ssh known_hosts, когда будет запущен плейбук Ansible.

Перед ansible.cfg обязательно должна быть точка, тем самым Ansible поймет, что конфигурацию надо искать в домашней директории пользователя.

Под этим же пользователем создайте директории. Они вам пригодятся в будущем.

mkdir -p

Создание плейбука useradd.yml

Давайте теперь создадим плейбук с помощью которого на удаленном сервере будет создан пользователь lnxcfg с правами sudo, а так же будет передан открытый ключ этого пользователя, чтобы в дальнейшем мы могли подключаться к серверу по publickey.

В директории /home/lnxcfg/playbooks создайте файл useradd.yml с таким содержимым.

--- - hosts: webservers become: true tasks: - name: Добавить пользователя 'lnxcfg' с добавлением его в группу 'wheel'. В CentOS 7 группа 'wheel' даёт права sudo user: name: lnxcfg password: shell: /bin/bash groups: wheel append: yes - name: Создать 2048-битовый SSH ключ для lnxcfg в ~lnxcfg/.ssh/id_rsa user: name: lnxcfg generate_ssh_key: yes ssh_key_bits: 2048 ssh_key_file: .ssh/id_rsa - name: Установить authorized key из файла id_rsa.pub authorized_key: user: lnxcfg state: present key: ">"

Сгенерировать хэш пароля:

python -c 'import crypt; print crypt.crypt("пароль")'

Права файла useradd.yml должны быть такими.

[lnxcfg@centos-2gb-nbg-vpn playbooks]$ ll total 12 -rw-r--rw-. 1 root root 5676 Feb 13 11:24 secure-ssh.yml -rw-r--r--. 1 lnxcfg lnxcfg 788 Feb 13 14:30 useradd.yml

Теперь сгенерируйте ключи.

[lnxcfg@centos-2gb-nbg-vpn ~]$ ssh-keygen -t ed25519 -o -a 100 && ssh-keygen -t rsa -b 4096 -o -a 100

Отлично! Теперь можно добавить нашего пользователя на удаленный сервер.

Переходим в директорию playbooks и запускаем наш плейбук с параметром -u и —ask-passw, чтобы сообщить Ansible о том, что подключиться к удаленному серверу надо под определенным пользователем с указанием пароля.

[lnxcfg@centos-2gb-nbg-vpn playbooks]$ ansible-playbook useradd.yml -u remote_user --ask-pass SSH password: PLAY [webservers] *************************************************************************************************************************************************************************** TASK [Gathering Facts] ********************************************************************************************************************************************************************** ok: [centos-2gb-nbg-webserver1] TASK [Добавить пользователя 'lnxcfg' с добавлением его в группу 'wheel'. В CentOS 7 группа 'wheel' даёт права sudo] ************************************************************************* ok: [centos-2gb-nbg-webserver1] TASK [Создать 2048-битовый SSH ключ для lnxcfg в ~lnxcfg/.ssh/id_rsa] *********************************************************************************************************************** ok: [centos-2gb-nbg-webserver1] TASK [Установить authorized key из файла id_rsa.pub] **************************************************************************************************************************************** ok: [centos-2gb-nbg-webserver1] PLAY RECAP ********************************************************************************************************************************************************************************** centos-2gb-nbg-webserver1 : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

Вот и всё. Теперь мы можем подключиться к серверу под пользователем.

[lnxcfg@centos-2gb-nbg-vpn playbooks]$ ssh centos-2gb-nbg-webserver1 Last login: Mon Feb 17 01:46:36 2020 from static.75.254.xx.xx.clients.your-server.de [lnxcfg@centos-2gb-nbg1-webserver1 ~]$

Примечание

Чтобы в дальнейшем деплоить плейбуки под пользователем lnxcfg без ввода пароля необходимо в файле /home/lnxcfg/inventory напротив каждого хоста прописать логин и пароль этого пользователя. Конечно, там же можно вместо логина и пароля прописать путь до закрытого ключа, но мне так удобней.

В файле invertory сейчас у нас запись такого вида.

[webservers] centos-2gb-nbg-webserver1

Добавим логин и пароль пользователя lnxcfg напротив ‘centos-2gb-nbg-webserver1’.

[webservers] centos-2gb-nbg-webserver1 ansible_ssh_user=lnxcfg ansible_sudo_pass=

Не забудьте изменить права файла inventory на 600.

Источники

Новость отредактировал: yatakoi — 14-02-2022, 12:31
Причина: Добавлена информация как сгенерировать хэш пароля

Создать пользователя и скопировать publickey с помощью Ansible

В этой статье мы покажем, как с помощью Ansible добавить на удаленные Linux сервера пользователей и ваш публичный ключ для SSH аутентификации.

Предполагаем, что у вас уже установлен Ansible.

Создайте пользователя anscfg, который будет использоваться для удаленного управления:

# groupadd -g 2002 anscfg
# useradd -u 2002 -g 2002 -c «Automation Account» -s /bin/bash -m -d /home/anscfg anscfg

Предоставьте пользователю право sudo и задайте пароль:

# usermod -aG wheel anscfg
# passwd anscfg

Войдите по новым пользователем:

Создайте служебные каталоги:

Сгенерируйте пару SSH ключей:

$ ssh-keygen -t ed25519 -o -a 100 && ssh-keygen -t rsa -b 4096 -o -a 100

Добавьте в файл hosts адреса удаленных серверов, которыми вы будете управлять:

192.168.31.21 nginx1 192.168.31.22 nginx2 192.168.31.23 nginx3

Теперь создайте файл с именами клиентов Ansible и добавьте ваши сервера:

[webservers] nginx1 nginx2 nginx3

создать inventory файл для ansible

По умолчанию Ansible использует конфигурационный файл /etc/ansible/ansible.cfg. Мы создадим собственный файл конфигурации:

[defaults] inventory = /home/anscfg/inventory host_key_checking = False
  • Обратите внимание на точку перед именем ansible.cfg. Она сообщает Ansible, что конфигурационный файлы нужно искать в домашней директории пользователя;
  • Параметр host_key_checking = False запрещает Ansible выполнять запрос на добавлении клиентского сервера в known_hosts при запуске плейбука Ansible.

Создайте новый плейбук

--- - hosts: webservers become: true tasks: - name: Create user anscfg user: name: anscfg password: shell: /bin/bash groups: wheel append: yes - name: Создать SSH ключ для anscfg в ~anscfg/.ssh/id_rsa user: name: anscfg generate_ssh_key: yes ssh_key_bits: 2048 ssh_key_file: .ssh/id_rsa - name: Добавить authorized key из файла id_rsa.pub authorized_key: user: anscfg state: present key: ">"

настройка плейбука ansible

Данный плейбук создаст на удаленном сервере пользователя anscfg с правами sudo, пару SSH ключей и установит публичный ключ.

Задайте права на файл:

$ chmod 644 /home/anscfg/playbooks/useradd.yml

Теперь можно запустить ваш плейбук:

$ ansible-playbook useradd.yml -u remote_user —ask-pass

После выполнения плейбука на удаленных хостах вы сможете подключиться к нему по SSH без пароля (с помощью закрытого ключа):

Если вы хотите деплоить плейбуки без ввода пароля, можно добавить имя пользователя и пароль в файл inventory:

[webservers] nginx1 ansible_ssh_user=anscfg ansible_sudo_pass= nginx2 ansible_ssh_user=anscfg ansible_sudo_pass= nginx3 ansible_ssh_user=anscfg ansible_sudo_pass=

Не забудьте изменить права на файл inventory на 600.

Как создать определенного пользователя на определенном хосте

Есть несколько компьютеров в сети, на каждом из них нужно создать пользователя с определенным логином и паролем. Пользователей создаю так:

vars_prompt: - name: "user_name" prompt: "User name" private: no - name: "user_password" prompt: "Enter a password for the user" private: yes encrypt: "md5_crypt" confirm: yes salt_size: 7 tasks: - name: "add new user" user: name: ">" password: ">" shell: /bin/bash 

Так как компов много не хочу запускать playbook огромное количество раз. В идеале хотел бы реализовать ввод списка хостов(компов) и списка пользователей. Пароль в принципе можно везде одинаковый сделать.

Отслеживать
задан 24 мая 2019 в 16:14
21 1 1 бронзовый знак
Пароль один, а юзеры разные? А какой смысл?
25 мая 2019 в 13:41

Мне просто нужно на компах создать пользователей, чтобы в их каталоги перенести данные, а потом уже сами пользователи поменяют пароли.

25 мая 2019 в 17:07

Тогда просто таска по созданию юзера, а потом запускаешь плейбук 1 раз с inventory файлом, где у тебя перечислены хосты.

25 мая 2019 в 17:10

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

На входе: список хостов с заранее известными адресами и количеством пользователей которых нужно добавить.

На выходе: каждый хост содержит сконфигурированные учетные записки для всех перечисленных пользователей.

~$ tree ./ ├── host_vars │ ├── host-01.yml │ ├── host-02.yml │ ├── host-03.yml │ ├── host-04.yml │ ├── host-05.yml │ ├── host-06.yml │ ├── host-07.yml │ ├── host-08.yml │ └── host-09.yml ├── inventory ├── pl-add-users.yml └── roles └── sys_cfg_users_groups └── tasks ├── main.yml └── set_userts.yml 
./host_vars/host-01.yml --- cfg: users: - name: "name-01" password: "hashed_password" shell: "/bin/bash" - name: "name-02" password: "hashed_password" shell: "/bin/bash" - name: "name-03" password: "hashed_password" shell: "/bin/bash" . ./host_vars/host-07.yml ./host_vars/host-08.yml ./host_vars/host-03.yml ./host_vars/host-09.yml ./host_vars/host-02.yml ./host_vars/host-05.yml ./host_vars/host-06.yml ./host_vars/host-04.yml ./inventory [main_group] host-01 ansible_hostname=192.168.1.1 host-02 ansible_hostname=192.168.1.2 host-03 ansible_hostname=192.168.1.3 host-04 ansible_hostname=192.168.1.4 host-05 ansible_hostname=192.168.1.5 host-06 ansible_hostname=192.168.1.6 host-07 ansible_hostname=192.168.1.7 host-08 ansible_hostname=192.168.1.8 host-09 ansible_hostname=192.168.1.9 ./roles/sys_cfg_users_groups/tasks/set_userts.yml --- - name: "set_users | creating user's group" group: name: ">" state: present when: cfg.users | bool with_items: ">" - name: "set_users | creating user's account" user: name: ">" group: ">" shell: ">" passowrd: ">" state: present when: cfg.users | bool with_items: ">" . ./roles/sys_cfg_users_groups/tasks/main.yml --- - name: "include | set users account" include_tasks: "set_users.yml" . ./pl-add-users.yml --- - hosts: main_group roles: - role: sys_cfg_users_groups 

Я бы в своей работе использую унифицированные роли и полностью декларированный список параметров для каждого хоста (под впечатлением от Guix)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *