Перейти к содержимому

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

  • автор:

Добавление учетных записей с помощью Ansible

Oct 6, 2016 22:38 · 260 words · 2 minute read ansible

Ранее мы уже рассматривали несколько вариантов использования системы управления конфигурациями Ansible , теперь давайте разберемся как добавить пользователя на удаленный хост!

Считаем, что Ansible установлен и настроен. Для создания пользователя на удаленном хосте мы будем использовать простой набор инструкций (плейбук), хотя можно подойти к вопросу более основательно и создать роль для управления пользователями (подробнее о ролях можно почитать здесь).

Создаем набор инструкций с именем useradd.yml :

touch useradd.yml 

Содержимое файла useradd.yml следующее:

--- - hosts: all  become: yes  tasks:   - name: Add user to remote hosts  user: name=admin groups=sudo shell=/bin/bash password=$6$KjyfytoJ$hoQdVIGcRZgje2HpHFf8ldvooLfY774SrEpHkADUf3d7uGBSwVLeMXsPIfb4l2TaXWvprMz868ZbH8HLaiDeh.   - name: Add SSH keys to remote hosts  authorized_key: user=admin key=">" 

В данном примере поле hosts: содержит группу, на которой будет запущена задача (task). Дополнительно указано, что для выполнения задач требуется эскалация привилегий ( become: yes ).

Примечание. become используется начиная с версии Ansible 1.9, до этого для эскалации привилегий использовали sudo .

Поле tasks: содержит имена задач (Add user to remote hosts и Add SSH keys to remote hosts), имена модулей, которые должны выполняться ( user и authorized_key ) и аргументы, необходимые для выполнения модуля (для первого это name , groups , shell , password , для второго — user , key ).

Запустить только что созданный набор инструкций можно следующей командой:

ansible-playbook playbooks/useradd.yml  PLAY [all] *********************************************************************  TASK [setup] ******************************************************************* ok: [test1] ok: [test2]  TASK [Add user to remote hosts] ************************************************ changed: [test2] changed: [test1]  TASK [Add SSH keys to remote hosts] ******************************************** changed: [test2] changed: [test1]  PLAY RECAP ********************************************************************* test2 : ok=3 changed=2 unreachable=0 failed=0 test1 : ok=3 changed=2 unreachable=0 failed=0 

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

Read more

© Copyright 2023 Yevhen Lebid

Создать пользователя и скопировать 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.

Регистрация результата — Основы автоматизации в Ansible

Представьте себе ситуацию, когда результат вывода одной таски, нужно использовать в другой. Например, добавить в cron список домашних директорий пользователя. Для выполнения такой операции в Ansible существует механизм, который называется регистрация результата:

- hosts: all gather_facts: no tasks: - ansible.builtin.shell: ls /Users register: home_dirs - name: add home dirs to cron ansible.builtin.cron: name: "backup_dirs" minute: "0" hour: "5,2" job: "backup /home/ item >>" with_items: home_dirs.stdout_lines - ansible.builtin.debug: var: home_dirs.stdout_lines 

С помощью ключа register , можно записать результат работы модуля shell в переменную с произвольным именем, например, home_dirs . И использовать эту переменную в другой задаче, при вызове модуля cron .

Распечатаем содержимое переменной home_dirs . Для этого нам подойдет модуль debug , который позволяет делать вывод значений:

- hosts: all gather_facts: no tasks: - ansible.builtin.shell: ls /Users register: home_dirs # - name: add home dirs to cron # ansible.builtin.cron: name="backup_dirs" minute="0" hour="5.2" job="backup /home/>" # loop: home_dirs.stdout_lines - name: print home_dirs variable ansible.builtin.debug: var: home_dirs 
-i inventory.ini TASK: [print home_dirs variable] **************** ok: [localhost] =>  "var":  "home_dirs":  "changed": true, "cmd": "ls /Users", "delta": "0:00:00.011196", "end": "2020-08-11 15:20:12.739441", "failed": false, "rc": 0, "start": "2020-08-11 15:20:12.728245", "stderr": "", "stderr_lines": [], "stdout": "Guest\nShared\nkirill" "stdout_lines": [ "Guest", "Shared", "kirill" ] > > > 

home_dirs — это хеш, внутри которого содержится информация о таске: выполнена ли задача, сколько времени заняло ее выполнение, какой модуль использовался и, самое главное, содержимое stderr и stdout . Причем stdout представлен в двух форматах: в виде строки и списка. Списочный формат позволяет использовать результат в цикле, что мы и сделали в первоначальном плейбуке.

Еще один пример:

- hosts: all gather_facts: no tasks: - ansible.builtin.command: 'false' register: result ignore_errors: yes - ansible.builtin.command: echo 'ehu' when: not result.failed - ansible.builtin.command: uptime when: result.failed 

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Наши выпускники работают в компаниях:

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

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

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

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