📜 Как настроить управляемые узлы Ansible и запустить специальные команды – часть 3

by itisgood
В предыдущих двух статьях этой серии Ansible мы объясняли основные компоненты Ansible и настройку узла управления Ansible.
В этой части 3 мы продемонстрируем, как вы можете настроить управляемые узлы Ansible для запуска специальных команд на удаленных хостах.

Настройка SSH-аутентификации без пароля на управляемые узлы

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

Это включает в себя генерацию пары ключей (пара открытых и закрытых ключей SSH) на узле Ansible Control и копирование открытого ключа на все удаленные хосты.

Это будет решающим шагом вперед и сделает вашу работу намного проще.

Траблшутинг:

Настройте повышение привилегий на управляемых узлах

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

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

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

Ansible позволяет вам «стать» другим пользователем на управляемом узле, отличном от того, который в данный момент вошел в систему.

become

Директива become:yes повышает ваши привилегии и позволяет вам выполнять задачи, требующие привилегий root, такие как установка и обновление пакетов и перезагрузка системы.

Рассмотрим плейбук httpd.yml, который устанавливает и запускает веб-сервер Apache, как показано ниже:
---
- name: install and start Apache webserver
  hosts: webservers

  tasks:
       - name: install httpd
         yum: name=httpd  state=latest
         become: yes
       - name: check httpd status
         service: name=httpd state=started
Директива become:yes позволяет вам выполнять команды от имени пользователя root на удаленном хосте.

become_user

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

Она позволяет вам переключаться на пользователя sudo на удаленном хосте при входе в систему, а не на пользователя, под которым вы входите.

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

- name: Run a command as the apache user
  command: somecommand
  become: yes
  become_user: tecmint

become_method

Эта директива переопределит метод по умолчанию, установленный в файле ansible.cfg, который обычно имеет значение sudo.

become_flags

Они используются на уровне play или task, например, когда вам нужно переключиться на пользователя, когда оболочка установлена на nologin.

Например,

- name: Run a command as nobody
  command: somecommand
  become: true
  become_method: su
  become_user: nobody
  become_flags: '-s /bin/sh'

Параметры командной строки в повышении привилегий

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

--ask-become-pass, -K– Это запросит у вас пароль пользователя sudo в удаленной системе, к которой вы пытаетесь подключиться.

$ ansible-playbook myplaybook.yml --ask-become-pass

--become, -b – Это позволяет запускать задачу как пользователь root без запроса пароля.

$ ansible-playbook myplaybook.yml --become

--become-user=BECOME_USER – Это позволяет запускать задачи от имени другого пользователя.

$ ansible-playbook myplaybook.yml --become-user=tecmint

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

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

В этом случае вам потребуется выполнить специальную команду.

Что такое команда Adhoc?

Специальная команда ansible adhoc – это однострочная команда, которая помогает вам выполнять простые задачи простым, но эффективным способом без необходимости создавать списки воспроизведения.

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

В этом уроке мы рассмотрим различные применения команд Ansible Ad-Hoc.

Мы собираемся использовать файл инвентори для демонстрации:

[webservers]
173.82.115.165

[database_servers]
173.82.202.239

Основное использование команд Adhoc

Самое основное использование команд Ansible-Adhoc – это пинг хоста или группы хостов.

# ansible -m ping all
В приведенной выше команде параметр -m является параметром модуля.
Ping – это команда adhoc, а второй параметр all представляет все хосты в файле инвентаризации.
Вывод команды показан ниже:
Чтобы пропинговать определенную группу хостов, замените параметр «all» на имя группы.
В приведенном ниже примере мы тестируем соединение с хостами в группе веб-серверов.
# ansible -m ping webservers
Кроме того, вы можете использовать атрибут -a для указания обычных команд Linux в двойных кавычках.
Например, чтобы проверить работоспособность системы удаленных систем, запустите:
# ansible -a "uptime" all
Для проверки использования диска удаленных хостов запустите.
# ansible -a "df -Th" all
Существуют сотни модулей, которые вы можете использовать с командой Adhoc.
Чтобы просмотреть весь список модулей с их описаниями, выполните команду, показанную ниже.
# ansible-doc -l
Чтобы просмотреть подробную информацию о конкретном модуле, выполните команду.
# ansible-doc module_name
Например, для поиска более подробной информации о запуске модуля yum:
# ansible-doc yum

Управление пакетами / сервисами с помощью Ansible

Ansible adhoc команды могут использоваться для установки и удаления пакетов с помощью менеджеров пакетов yum и apt.

Чтобы установить веб-сервер Apache на хост CentOS 7 в группе веб-серверов в файле инвентаризации, выполните команду:

# ansible webservers -m yum -a "name=httpd  state=present"
Чтобы проверить установку веб-сервера Apache, войдите на удаленный клиент и запустите.
# rpm -qa | grep httpd
Чтобы удалить Apache, просто измените состояние с present на absent.
# ansible webservers -m yum -a "name=httpd  state=absent"
Еще раз для подтверждения удаления httpd запустите.
# rpm -qa | grep httpd
Как уже отмечалось, пакеты веб-сервера Apache были удалены.

Создание пользователей и групп с помощью Ansible

При создании пользователей пригодится модуль «user».

Чтобы создать нового пользователя james с паролем redhat на клиентской системе database_server, введите команду.

# ansible database_server -m user -a "name=james password=redhat"
Чтобы подтвердить создание нового пользователя, выполните команду:

# ansible database_servers -a "id james"
Чтобы удалить пользователя, выполните команду:

# ansible database_servers -m user -a "name=james state=absent"

Повышение привилегий


Если вы используете Ansible как обычный пользователь, Ansible обеспечивает повышение привилегий на удаленных хостах, используя опцию –become для получения корневых привилегий и -k для запроса пароля.

Например, чтобы запустить команду Ansible adhoc ‘netstat -pnltu‘ с привилегированной опцией –-become и опцией -K, чтобы запросить пароль пользователя root для запуска команды.

$ ansible webservers -m shell -a 'netstat -pnltu' --become -K

Чтобы стать другим пользователем, кроме root, используйте атрибут –become-user.

Например, чтобы запустить «df -Th» от имени пользователя itisgood на удаленных хостах и запросить пароль, выполните:

$ ansible all -m shell -a 'df -Th' --become-user itisgood -K

Сбор фактов о хост-системах

Facts относятся к подробной информации о системе.

Это включает информацию об IP-адресе, архитектуре системы, памяти и процессоре.

Чтобы получить информацию об удаленных хостах, выполните команду:

$ ansible all -m setup

Передача файлов / Копирование файлов

Ansible использует модуль copy для безопасного копирования файлов из элемента управления Ansible на несколько удаленных хостов.

Ниже приведен пример операции копирования:

# ansible webservers -m copy -a "src=/var/log/secure dest=/tmp/"

Команда копирует файл /var/log/secure в узле Ansible Control на удаленные хосты в группе веб-серверов в место назначения /tmp.

Вы можете использовать модуль file для изменения прав доступа и владельца файла.

# ansible webservers -m file -a "dest=/tmp/secure mode=600"
Кроме того, вы можете добавить аргументы владельца и группы, как показано ниже:
# ansible webservers -m file -a "dest=/tmp/secure mode=600 owner=tecmint group=tecmint"
Вы также можете создавать каталоги, аналогично mkdir -p, как показано ниже:
$ ansible webservers -m file -a "dest=/path/to/directory mode=755 owner=tecmint group=tecmint state=directory"
Например:
$ ansible webservers -m file -a "dest=/home/tecmint/data mode=755 owner=tecmint group=tecmint state=directory"

Заключение

В этой статье мы расскажем о том, как настроить управляемые узлы для запуска специальных команд Ansible для управления удаленными узлами.

Мы надеемся, что вы нашли эту статью полезной.

Оставайтесь с нами. Мы продолжим серию статей про Ansible!

You may also like

Leave a Comment