Как создать определенного пользователя на определенном хосте
Есть несколько компьютеров в сети, на каждом из них нужно создать пользователя с определенным логином и паролем. Пользователей создаю так:
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)
click fraud protection
Управление пользователями и их атрибутами — типичная операция для любого системного администратора. Пользовательский модуль Ansible — один из самых удобных способов управления пользователями и их атрибутами при работе с удаленными хостами.
Модуль Ansible.builtin.user является частью ansible-core и доступен по умолчанию в большинстве установок ansible.
В этом руководстве мы сосредоточимся на том, как управлять учетными записями пользователей с помощью пользовательского модуля ansible.
Как работает модуль Ansible User
Пользовательский модуль Ansible работает с использованием набора параметров. Каждый параметр позволяет вам настроить действие, выполняемое модулем, и то, как модуль выполняет заданные действия на удаленном хосте.
Ниже приведены некоторые из важных параметров пользовательского модуля Ansible.
- имя — Имя пользователя для создания, удаления или изменения
- пароль — Устанавливает пароль для указанного пользователя.
- uid — Устанавливает UID определенного пользователя.
- оболочка — Устанавливает оболочку по умолчанию для пользователя.
Хорошо понимать, что есть другие параметры, не описанные в этом руководстве. Проверить Документы по доступному пользовательскому модулю, чтобы узнать больше.
Лучший способ проиллюстрировать использование пользовательского модуля Ansible — использовать практические примеры.
Практические примеры пользовательского модуля Ansible
В этом руководстве мы предполагаем, что у вас есть управляющий узел Ansible с настроенной инвентаризацией удаленного хоста.
Прежде чем продолжить, начните с проверки, работают ли удаленные хосты:
доступный все -m ping -v
Если все хосты включены и все требования выполнены, вы должны увидеть результат, аналогичный показанному ниже:

Пример 1: Как создать пользователя
Чтобы создать пользователя на удаленных хостах, мы можем использовать простую книгу воспроизведения, такую как показанная в примере ниже:
— хосты: все
стать реальностью
задания:
— name: создать пользователя на удаленном хосте
ansible.builtin.user:
имя: ansible_test
оболочка: / bin / bash
группа: колесо
В приведенном выше примере мы вызываем пользовательский модуль, используя его полное имя. Однако вы можете кратко называть его «пользователь».
- имя — Задает имя пользователя целевого пользователя для создания
- оболочка — Устанавливает оболочку по умолчанию для пользователя
- группа — Определяет основную группу для пользователя
Сохраните playbook и запустите с помощью команды:
Ansible-playbookСоздать пользователя.yml
Пример 2: Как удалить пользователя
Мы можем удалить удаленного пользователя, установив состояние как отсутствует и удалив значение true. Ниже приведен пример сценария:
— хосты: все
стать реальностью
задания:
— имя: удалить пользователя
ansible.builtin.user:
имя: ansible_test
состояние: отсутствует
удалить: правда
В этом примере мы устанавливаем состояние как отсутствует. Если установить для параметра remove значение true, будут удалены связанные с пользователем каталоги.

Пример 3: Как установить срок действия пароля
Предположим, мы хотим установить дату истечения срока действия пароля пользователя. Мы можем сделать это, установив срок годности как:
— хосты: все
стать реальностью
задания:
— имя: установить срок действия пароля
ansible.builtin.user:
имя: ansible_test
password_expire_min: 5
password_expire_max: 15
Пример 4: Как создать SSH-ключ для пользователя
Чтобы сгенерировать пару ключей SSH для удаленного пользователя, мы можем использовать параметры generate_ssh_key, как показано в playbook ниже:
— хосты: все
задания:
— name: сгенерировать ключ ssh
Пользователь:
имя: ansible_test
generate_ssh_key: true
файл-ключа-ssh: ~ / .ssh / id_rsa
ssh_key_type: rsa
ssh_key_bits: 4096
Пример 5: Как обновить пароль пользователя
Чтобы обновить пароль пользователя, мы создадим резервную копию тени и сгенерируем хэш для пароля, как показано в инструкции ниже:
— хосты: все
стать реальностью
задания:
— имя: резервный теневой файл
копия:
SRC: / и т.д. / тень
dest: /etc/shadow.bak
— имя: обновить пароль пользователя
Пользователь:
имя: ansible_test
состояние: настоящее
update_password: правда
пароль: «>»
В приведенном выше примере мы начинаем с резервного копирования теневого файла. Далее мы указываем новый пароль для пользователя.
Запустите playbook как:
ansible-playbook updatepass.yml updatedpassword =
Заключение
Это руководство научило вас управлять пользователями и их атрибутами с помощью пользовательского модуля 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
Регистрация результата — Основы автоматизации в 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 студентов
Наши выпускники работают в компаниях: