We detected you are likely not from a Russian-speaking region. Would you like to switch to the international version of the site?

  Назад к списку статей

Разработка инструмента для автоматического обнаружения и исправления конфигурационных ошибок в Linux‑системах через Termux с Ansible и Bash‑скриптами

Подробное руководство по созданию автоматизированного решения для поиска и исправления конфигурационных ошибок в Linux‑системах с помощью Termux, Ansible и Bash‑скриптов. Практические примеры, архитектура и рекомендации от RybinskLab.

Конфигурационные ошибки в Linux‑системах – одна из главных причин сбоев и уязвимостей. Их обнаружение часто требует ручного анализа, что отнимает время и повышает риск человеческой ошибки. В этой статье мы покажем, как собрать компактный инструмент, работающий полностью в Termux на Android‑устройстве, использующий Ansible для декларативного описания желаемого состояния и Bash‑скрипты для автоматического исправления найденных отклонений.

Почему именно Termux?

Termux предоставляет полноценный Linux‑окружение на Android без необходимости root‑доступа. Это делает его идеальной площадкой для:

  • Портативных аудитов серверов (по SSH).
  • Запуска локального CI/CD‑pipeline прямо на смартфоне.
  • Быстрого прототипирования без установки виртуальных машин.

Все необходимые пакеты (python, ansible, sshpass и др.) доступны через pkg‑менеджер.

Архитектура решения

Схема взаимодействия выглядит так:

+-------------------+      SSH      +-------------------+
|    Termux (Android) | ----------> |   Remote Linux    |
|-------------------|               |  (target host)    |
| Bash‑wrapper       |               +-------------------+
|   └─> Ansible playbook (checks)          |
|   └─> Bash‑fixer (apply fixes)          |
+-------------------+

Базовый процесс:

  1. Базовый Bash‑скрипт (run_check.sh) инициирует подключение к удалённому хосту.
  2. Запускается Ansible‑плейбук detect.yml, который собирает информацию о конфигурации (systemd‑службы, файлы /etc, параметры ядра и т.д.).
  3. Результаты сохраняются в JSON‑файл report.json.
  4. Если найдены отклонения, Bash‑скрипт вызывает второй Ansible‑плейбук fix.yml или локальные Bash‑модули для исправления.

Подготовка окружения в Termux

# Обновляем репозитории
pkg update -y && pkg upgrade -y

# Устанавливаем необходимые пакеты
pkg install -y python git openssh sshpass

# Устанавливаем Ansible через pip
pip install --user ansible

# Добавляем ~/.local/bin в PATH (для текущей сессии)
export PATH=$HOME/.local/bin:$PATH

# Проверяем версии
python --version
ansible --version

Создание Ansible‑плейбука для обнаружения ошибок

Файл detect.yml описывает набор «facts», которые нам нужны для анализа.

---
- name: Сбор данных о конфигурации
  hosts: all
  gather_facts: false
  vars:
    report_path: /tmp/report.json
  tasks:
    - name: Получить статус systemd‑служб
      command: systemctl is-enabled {{ item }}
      register: svc_status
      loop:
        - sshd
        - firewalld
        - nginx
      ignore_errors: true

    - name: Считать текущие параметры ядра
      sysctl:
        name: net.ipv4.ip_forward
      register: ip_forward

    - name: Сохранить результаты в JSON
      copy:
        dest: "{{ report_path }}"
        content: |
          {
            "services": {{ svc_status.results | map(attribute='stdout') | list }},
            "ip_forward": {{ ip_forward.stdout }}
          }
          
    - name: Передать отчет локально
      fetch:
        src: "{{ report_path }}"
        dest: "./reports/{{ inventory_hostname }}_report.json"
        flat: yes

Bash‑обёртка: автоматизация процесса

#!/usr/bin/env bash
set -euo pipefail

# Параметры подключения
HOST=${1:?Укажите IP/hostname целевого сервера}
USER=${2:-root}
PASS=${3:?Укажите пароль или настройте SSH‑ключ}

# Путь к Ansible‑инвентори
cat > inventory.ini <<EOF
[targets]
${HOST} ansible_user=${USER} ansible_ssh_pass=${PASS} ansible_python_interpreter=/usr/bin/python3
EOF

# Запуск обнаружения
ansible-playbook -i inventory.ini detect.yml

# Анализ отчёта
REPORT=$(cat reports/${HOST}_report.json)
echo "Отчёт получен: $REPORT"

# Пример простого условия: если ip_forward выключен – включаем
if echo "$REPORT" | grep -q '"ip_forward": "0"'; then
  echo "Включаем ip_forward..."
  ansible-playbook -i inventory.ini -e "ip_forward=1" fix.yml
else
  echo "IP‑forward включён, действий не требуется."
fi

# Очистка временных файлов
rm -f inventory.ini

Скрипт run_check.sh можно разместить в любой директории Termux и запускать так:

chmod +x run_check.sh
./run_check.sh 192.168.1.100 root mySecretPass

Playbook для исправления (fix.yml)

---
- name: Исправление обнаруженных проблем
  hosts: all
  gather_facts: false
  vars:
    ip_forward: "{{ ip_forward | default('0') }}"
  tasks:
    - name: Включить ip_forward, если требуется
      sysctl:
        name: net.ipv4.ip_forward
        value: "{{ ip_forward }}"
        state: present
        reload: yes
      when: ip_forward == "1"

    - name: Обеспечить включение sshd
      service:
        name: sshd
        enabled: true
        state: started

Тестирование и отладка

Для локального тестирования удобно использовать контейнер Docker, имитирующий удалённый хост:

# Запускаем контейнер с systemd (упрощённый вариант)
docker run -d --name test‑linux --privileged ubuntu:22.04 sleep infinity

# Устанавливаем ssh внутри контейнера
docker exec test‑linux apt update && docker exec test‑linux apt install -y openssh-server

docker exec test‑linux systemctl start ssh

# Получаем IP контейнера
HOST=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' test‑linux)

# Запускаем проверку
./run_check.sh $HOST root ''

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

Расширение функциональности

  • Модульные проверки. Добавьте новые роли Ansible для проверки NTP, SELinux, firewall и др.
  • Интеграция с CI. Запускайте run_check.sh из GitHub Actions, перед деплоем.
  • Отчётность. Формируйте HTML‑/PDF‑отчёты с помощью ansible‑report или jq + шаблоны Jinja2.

Заключение

Мы построили полностью автономный инструмент, позволяющий обнаруживать и автоматически исправлять типичные конфигурационные ошибки в Linux‑системах, используя лишь смартфон с Termux. Такое решение особенно ценно для полевых инженеров, DevOps‑специалистов и системных администраторов, которым необходимо быстро проверять несколько серверов без установки тяжёлых клиентских пакетов.

RybinskLab предлагает профессиональные услуги по разработке и адаптации подобных автоматизированных решений под ваш бизнес: настройка Ansible‑инвентори, написание кастомных проверок, интеграция с системами мониторинга и CI/CD, а также обучение персонала. Свяжитесь с нами, чтобы вывести управление инфраструктурой на новый уровень.

* Текст статьи подготовлен и структурирован с использованием технологий искусственного интеллекта. Проверен и доработан перед публикацией.

Нужна помощь с настройкой Termux, Linux и серверов?

Я оказываю ИТ-услуги: настройка серверов, автоматизация, безопасность, помощь с Linux и инфраструктурой. Материалы сайта — только в ознакомительных и образовательных целях.

Связаться со мной
Поддержать проект