Виконання команд на віддалених серверах за допомогою модуля Ansible Shell
Ansible — це широко поширений інструмент керування конфігураціями, який спрощує адміністрування кількох серверів. Він оптимізує такі завдання, як початкове налаштування серверів і встановлення застосунків, завдяки автоматизації, дозволяючи керувати великою кількістю віддалених серверів і виконувати завдання послідовно з центрального керувального вузла. Також Ansible є популярним завдяки великій кількості модулів і здатності безперебійно працювати через SSH без потреби встановлення додаткового програмного забезпечення на цільових серверах.
У цій статті ми розглянемо, як виконувати команди на віддалених серверах за допомогою модуля Ansible shell. Крім того, ми також розглянемо виконання ad-hoc команд Ansible та створення playbook для запуску різних shell-команд.
Передумови
Для використання модуля Ansible shell необхідно виконати такі умови:
У цьому посібнику використовується Ubuntu 22.04. Отже, Ansible має бути встановлений і налаштований у вашій системі Ubuntu.
Має бути налаштований віддалений хост, на якому ви будете виконувати команди за допомогою модуля Ansible shell.
Що таке модуль Ansible Shell?
Модуль Ansible shell дозволяє користувачам виконувати команди безпосередньо в оболонці цільових систем. Він дає змогу запускати складні команди з використанням конвеєрів і перенаправлення, зберігаючи первинну логіку виконання команд на віддалених вузлах.
Під час виконання команд за допомогою модуля Ansible shell він приймає назву команди, параметри або аргументи, розділені пробілами, та виконує ці команди на віддалених хостах.
Різниця: модуль Ansible Shell vs. модуль Command
Модулі Ansible shell і command є досить схожими та зазвичай дають однакові результати. Проте між ними існує кілька відмінностей, які наведено нижче:
Модуль Ansible shell підтримує всі спеціальні оператори, змінні середовища, конвеєри та перенаправлення. Натомість модуль command не підтримує оператори (<, >, &, ;, ||), змінні середовища та конвеєри.
Модуль command не дозволяє виконувати команди безпосередньо в оболонці. У цьому випадку модуль Ansible shell надає більшу гнучкість, оскільки дозволяє напряму виконувати команди в shell цільових хостів. За замовчуванням він використовує оболонку /bin/sh для виконання команд. Також можна налаштувати використання інших оболонок для запуску команд на віддалених хостах.
Користувачі Ansible часто надають перевагу модулю command з міркувань безпеки під час виконання команд на цільових системах. Команди, запущені через модуль command, вважаються безпечнішими та більш передбачуваними, ніж через модуль Ansible shell. Крім того, модуль command не впливає на середовище віддаленої оболонки користувача.
Початок роботи з командами Ansible Shell: виконання ad-hoc команд
Ad-hoc команди — це однорядкові команди, які не призначені для повторного використання в майбутньому. Однак за допомогою ad-hoc shell-команд Ansible можна швидко виконувати окремі завдання. Базовий синтаксис ad-hoc команд наведено нижче:
У наведеному вище синтаксисі pattern представляє групу хостів, до якої належить цільовий хост. Опція -m визначає тип модуля, а опція -a приймає аргументи команди.
Приклад використання ad-hoc команд Ansible
Розглянемо приклад, щоб пояснити синтаксис ad-hoc команд Ansible. У цьому прикладі ми спробуємо відобразити дату та час на цільовому хості.
Наведена команда під’єднається до віддаленого хоста через SSH і виконає команду timedatectl для відображення налаштувань дати й часу.
Ця команда відфільтрує та виведе лише рядки, що містять слово “Time”.
Отримання системної інформації
Команда виконує uptime після підключення до віддаленого хоста.
Команда використовується для збору системних фактів та інформації про віддалений хост.
Як використовувати модуль Ansible Shell?
Перед виконанням shell-команд необхідно знати основні параметри:
chdir — змінює поточний каталог перед виконанням команди.
cmd — рядок з командою та аргументами.
executable — абсолютний шлях до оболонки.
removes — пропускає кроки, якщо файл не існує.
stdin — задає стандартний ввід команди.
warn — вмикає або вимикає попередження.
Запуск команд Ansible за допомогою модуля Shell
Основна перевага Ansible — використання playbook для виконання складних завдань на віддалених хостах.
Запуск однієї команди за допомогою модуля Ansible Shell
Запуск playbook:
Запуск кількох команд за допомогою модуля Ansible Shell
Playbook виконує кілька завдань послідовно, використовуючи змінні для гнучкості.
Встановлення пакета за допомогою модуля Ansible Shell
Запобігання ін’єкціям shell-команд
Для безпечного використання модуля shell застосовується техніка quote filtering, яка захищає змінні від ін’єкцій.
Висновок
Модуль Ansible shell є гнучким і потужним інструментом, який спрощує конфігурацію віддалених серверів і розширює можливості керування. Завдяки наведеним прикладам ви зможете ефективно використовувати модуль Ansible shell у своїй Linux-системі.
Blog