Выполнение команд на удаленных серверах с помощью модуля оболочки Ansible
Ansible - это широко распространенный инструмент управления конфигурацией, который упрощает управление несколькими серверами. Он упрощает такие задачи, как настройка сервера и установка приложений, благодаря автоматизации, позволяя вам управлять множеством удаленных серверов и последовательно запускать задачи из центрального узла ядра. Кроме того, Ansible популярен благодаря многочисленным модулям и способности беспрепятственно работать через SSH без необходимости установки дополнительного программного обеспечения на целевых серверах.
В этом уроке мы научимся запускать команды на удаленных серверах с помощью модуля оболочки Ansible. Кроме того, мы также рассмотрим, как запускать специальные команды Ansible и создать плейбук для выполнения различных команд оболочки.
Необходимые условия
Для использования модуля оболочки Ansible вам необходимо иметь следующие предпосылки:
- В этом руководстве мы используем Ubuntu 22.04. Поэтому Ansible должен быть установлен и настроен в вашей системе Ubuntu.
- Вы должны настроить удаленный хост, на котором вы будете выполнять команды с помощью модуля оболочки Ansible.
Что такое модуль оболочки Ansible?
Модуль оболочки Ansible позволяет пользователям выполнять команды в командной оболочке целевых систем. Он позволяет запускать сложные команды с использованием труб и перенаправления на удаленных объектах с сохранением оригинальности выполнения команды.
При запуске команд в модуле командного интерпретатора Ansible принимает имя команды, параметры или аргументы, разделенные разделителями белого пространства, и выполняет эти команды на удаленных хостах.
Разница: Модуль оболочки Ansible против командного модуля
И модуль оболочки Ansible, и командный модуль довольно похожи и дают одинаковые результаты. Однако между этими двумя модулями есть несколько различий, которые мы перечислили ниже:
- Модуль оболочки Ansible поддерживает все специальные операторы, переменные среды, каналы и перенаправления. В то время как командные модули не поддерживают операторы(<, >, &,;, | |), переменные окружения и каналы.
- Командный модуль не позволяет пользователям выполнять команды непосредственно в командной строке. В этом случае модуль оболочки Ansible предлагает большую гибкость, чем командный модуль. С помощью модуля оболочки вы можете напрямую выполнять команды в командной строке целевых хостов. По умолчанию для запуска команд используется оболочка «/bin/sh». Вы также можете настроить другие оболочки для запуска команд на удаленных хостах.
- Пользователи Ansible предпочитают использовать командные модули с точки зрения безопасности при выполнении команд на целевых системах. Команды, выполняемые в командном модуле Ansible, более безопасны и предлагают более предсказуемые варианты, чем в модуле оболочки Ansible. Кроме того, командный модуль не влияет на удаленную среду пользовательской оболочки.
Начало работы с командами оболочки Ansible: Запуск специальных команд
Специальные команды - это однострочные команды, которые нельзя повторно использовать в будущем. Однако, вы можете использовать специальные команды оболочки Ansible для быстрого запуска отдельных задач. Ниже приведен базовый синтаксис специальных команд:
ansible [pattern] -m [ansible-module] -a {commands with options}
В приведенном выше синтаксисе шаблон представляет группу хостов, к которой принадлежит целевой хост. Опция '-m' указывает тип модуля, а опция '-a' получает аргументы команды.
Давайте рассмотрим пример для объяснения синтаксиса команды Ansible Ad-hoc. В этом примере мы попытаемся отобразить дату и время целевого хоста. Здесь мы подключились только к одному хосту и создали отдельного пользователя «ansible». Для отображения даты и времени удаленного хоста воспользуйтесь следующей командой:
$ ansible 192.168.1.14 -u ansible -m shell -a «timedatectl»
Приведенная выше специальная команда Ansible соединится с удаленным хостом по IP-адресу «192.168.1.14», используя имя пользователя «ansible» по SSH. После этого на удаленном хосте будет выполнена команда «timedatectl», которая используется для отображения информации о настройках даты и времени системы.
$ ansible <ip-address> -u ansible -m shell -a «timedatectl | grep Time»
С помощью приведенной выше специальной команды ansible выполнит команду «timedatectl», а затем с помощью команды grep отфильтрует и покажет строки, содержащие «Time».
Аналогично, вы можете отобразить системную информацию с помощью команды «uptime» и среднюю загрузку. Для этого воспользуйтесь следующей командой:
$ ansible <ip-address> -u ansible -m shell -a «uptime»
Когда вы запустите приведенную выше команду оболочки Ansible, она выполнит команду uptime после соединения с удаленным хостом.
$ ansible <ip-address> -u ansible -m shell -a setup
Приведенная выше команда служит для сбора системных фактов и информации об удаленном хосте с помощью Ansible.
Как пользоваться модулем оболочки Ansible?
Прежде чем запускать команды оболочки Ansible, важно знать основные параметры оболочки, которые вам нужно будет передать при использовании модуля оболочки Ansible:
chdir - изменяет текущий каталог перед выполнением команды.
cmd - строка, содержащая команду для запуска вместе со всеми связанными с ней аргументами.
executable - Требует указать абсолютный путь для изменения оболочки, используемой пользователем.
removes - Принимает имя файла и используется для исключения шагов, если файл не существует.
stdin - Позволяет пользователю установить для параметра «stdin» команды определенное значение.
warn - Принимает (по умолчанию) значение «да» или «нет», включая или выключая предупреждение о задании.
После этого давайте рассмотрим некоторые примеры использования оболочки Ansible.
Команды запуска Ansible с помощью модуля оболочки
Настоящей силой Ansible является использование плейбуков, которые позволяют выполнять расширенные задачи на целевых хостах. Помимо использования специальных команд, вы также можете использовать модуль оболочки Ansible в плейбуках для определения задач для удаленных хостов.
Запуск одной команды с помощью модуля оболочки Ansible
Вы также можете запустить отдельную команду с помощью модуля оболочки Ansible. Для этого создайте плейбук и вставьте в этот файл следующие строки кода:
- имя: Shell module example hosts: database_servers задачи: - name: Проверка системной информации shell: «df -h» register: «os_info» - отладка: msg: «{{»os_info«.stdout_lines}}»
Теперь сохраните изменения в этом файле и выйдите из него с помощью «Ctrl+X». После этого запустите этот плейбук с помощью следующей команды:
$ ansible-playbook --ask-become-pass -i hosts environment_var.yml
После запуска приведенной выше команды в окне терминала вы увидите следующую информацию:
Запуск нескольких команд в Ansible с помощью модуля оболочки с помощью модуля оболочки
С помощью Ansible вы можете запускать несколько задач последовательно. Чтобы создать плейбук Ansible, создайте пустой файл в редакторе исходного кода. В этом руководстве мы используем редактор nano для создания плейбука.
$ sudo nano testplaybook.yml
Приведенный выше плейбук Ansible выполняет различные задачи, такие как создание пользователя, обновление кэша пакетов и установка или обновление пакета Nginx на указанном удаленном целевом хосте. Он использует переменные, чтобы сделать плейбук более гибким и пригодным для многократного использования.
Сохраните приведенный выше файл с помощью «Ctrl+O „ и выйдите из него с помощью “Ctrl+x».
Здесь мы используем собственный файл инвентаризации «hosts». Чтобы запустить этот плейбук, воспользуйтесь следующей командой:
$ ansible-playbook --ask-become-pass -i hosts testplaybook.yml
В приведенной выше команде «--ask-become-pass» попросит вас ввести пароль root, а затем выведет на экран следующий результат:
Установка пакета с модулем оболочки Ansible с модулем оболочки
Вы также можете установить пакет на целевой удаленный хост. Рассмотрим следующий пример установки пакета «apache2 » на целевой хост с помощью Ansible:
hosts: database_servers стать: да задачи: имя: apt: update_cache: да имя: установить пакет apache2 apt: имя: apache2
После запуска приведенного выше сценария вы увидите, что apache2 установлен на удаленных серверах.
Предотвращение командного вмешательства в командный интерпретатор
Как мы уже обсуждали ранее, командный модуль в Ansible считается более безопасным выбором для выполнения команд на удаленных системах. Однако, он имеет определенные ограничения с точки зрения функциональности.
Для безопасного использования модуля оболочки вы можете применить технику, называемую «фильтрацией кавычек», чтобы предотвратить имена переменных от потенциальной инъекции команд. В приведенном ниже примере это продемонстрировано на примере вставки команд, чтобы обеспечить безопасность ваших команд в командной строке.
- имя: Создать таблицу в базе данных { имя базы данных } ``shell`: `mysql -u root -psecret -e «CREATE TABLE { quote| table name | quote } (id INT, name VARCHAR(255));»` стать: да - имя: Пример фильтра цитат Ansible хосты: серверы баз данных vars: - имя базы данных: mydb - имя таблицы: my table
Приведенный выше пример Ansible создает таблицу MySQL с уникальным именем в указанной базе данных, используя фильтр кавычек для защиты от потенциальных проблем со специальными символами в названии таблицы.
Вывод
Модуль оболочки Ansible - это гибкий и надежный инструмент, который улучшает контроль пользователя и упрощает конфигурацию удаленных серверов. В этой статье мы рассмотрели, как использовать модуль оболочки Ansible, его параметры и необходимые аргументы. Мы надеемся, что с этими знаниями вы сможете эффективно использовать модуль оболочки Ansible в вашей системе Linux.
Blog