Гид по технологиям

Установка и настройка Ansible на CentOS и Ubuntu

• 6 min read • DevOps • Обновлено 22 Nov 2025
Установка и настройка Ansible на CentOS и Ubuntu
Установка и настройка Ansible на CentOS и Ubuntu

Иллюстрация Ansible — концепция управления конфигурацией и соединения по SSH

Почему Ansible

Ansible — инструмент конфигурационного управления на Python, читаемый и простой: плейбуки описываются на YAML, агент на целевых машинах не требуется. Контроллер подключается по SSH (порт 22) и выполняет модули/плейбуки удалённо.

Короткое определение: Ansible — средство для автоматизации развертывания и управления конфигурацией через SSH, использующее декларативные плейбуки на YAML.

Основные сценарии использования

  • Первичная конфигурация серверов
  • Развёртывания приложений
  • Изменения конфигурации и управление сервисами
  • Патчинг и обновления пакетов
  • Управление ролями и секретами (через дополнения)

Требования и термины

  • Контроллер — машина с установленным Ansible, откуда вы запускаете команды.
  • Управляемый узел (managed node) — сервер под управлением Ansible.
  • Inventory (файл hosts) — список узлов и групп, которые контроллер видит.
  • Порт SSH: 22 — стандартный порт для подключения.

Перед началом

Проверьте, что на контроллере установлен Python 3 и доступ в сеть к управляемым узлам по SSH (порт 22). Убедитесь, что у вас есть привилегии sudo на контроллере для установки пакетов и правка /etc/ansible/hosts.

Установка Ansible на CentOS 7

  1. Установите Python 3 (Ansible требует Python на контроллере и на многих модулях — на целевых узлах тоже):
$sudo yum install python3 -y
  1. Установите репозиторий EPEL (в CentOS 7 он часто нужен):
$sudo yum install epel-release -y
  1. Обновите индекс пакетов и систему:
$sudo yum update -y
  1. Установите Ansible:
$sudo yum install ansible -y
  1. Проверьте версию:
$ansible -v

Установка Ansible на CentOS 8

  1. Установите Python 3:
$sudo dnf install python3 -y
  1. Установите EPEL (если нужно):
$sudo dnf install epel-release -y
  1. Обновите систему и установите Ansible:
$sudo dnf update -y
$sudo dnf install ansible -y
  1. Проверьте установку:
$ansible -v

Установка Ansible на Ubuntu / Debian

  1. Установите Python 3 (часто установлен по умолчанию):
$sudo apt-get update -y
$sudo apt-get install python3 -y
  1. Добавьте официальный PPA Ansible (опционально) и установите Ansible:
$sudo apt-add-repository --yes --update ppa:ansible/ansible
$sudo apt-get update -y
$sudo apt-get install -y ansible
  1. Проверьте версию:
$ansible -v

Универсальная установка через pip

Если вы хотите изолированную версию или быстрее обновлять Ansible, можно установить через pip.

Установите pip и Python 3, затем:

Для CentOS 7:

$sudo yum install python3 python3-pip -y

Для CentOS 8:

$sudo dnf install python3 python3-pip -y

Для Ubuntu/Debian:

$sudo apt-get install python3 python3-pip -y

Установка Ansible через pip:

$sudo pip3 install ansible

Проверка:

$ansible -v

Примечание: pip-установка может поместить пакеты в /usr/local; для управления совместимостью рекомендуется использовать виртуальные окружения (venv) или системный пакетный менеджер для продакшен-сред.

Минимальная конфигурация контроллера: /etc/ansible/hosts (inventory)

Ansible использует inventory-файл по умолчанию: /etc/ansible/hosts. В нём перечисляются IP/имена узлов и группы.

Создание файла, если его нет:

$sudo touch /etc/ansible/hosts
$sudo chmod 644 /etc/ansible/hosts

Пример простого inventory:

[node_servers]
host1 ansible_ssh_host=192.168.0.2
host2 ansible_ssh_host=192.168.0.3
host3 ansible_ssh_host=192.168.0.4

Разбор параметров:

  • [node_servers] — имя группы.
  • host1 — алиас узла, который удобней использовать в командах.
  • ansible_ssh_host — реальный IP или DNS-имя узла.

Альтернативный формат: просто перечислять IP-адреса или DNS-имена (без алиасов):

[node_servers]
192.168.0.2
192.168.0.3

Глобальные переменные для групп: group_vars

Создайте директорию для переменных групп:

$sudo mkdir -p /etc/ansible/group_vars

Пример file /etc/ansible/group_vars/node_servers.yml:

---
ansible_ssh_user: james
ansible_become: true
ansible_python_interpreter: /usr/bin/python3

Разъяснение переменных:

  • ansible_ssh_user — пользователь, от имени которого Ansible будет подключаться.
  • ansible_become — использовать привилегии (sudo) для выполнения задач.
  • ansible_python_interpreter — путь к Python на целевом узле (важно для новых систем).

Настройка SSH: авторизация по ключам (рекомендуется)

Парольная аутентификация работает, но для удобства и безопасности лучше настроить SSH-ключи.

На контроллере выполните:

$ssh-keygen -t rsa -b 4096 -C "ansible@controller"
$ssh-copy-id -i ~/.ssh/id_rsa.pub james@192.168.0.2
$ssh-copy-id -i ~/.ssh/id_rsa.pub james@192.168.0.3
$ssh-copy-id -i ~/.ssh/id_rsa.pub james@192.168.0.4

Если ssh-copy-id недоступна, используйте:

$cat ~/.ssh/id_rsa.pub | ssh james@192.168.0.2 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Проверьте подключение:

$ssh james@192.168.0.2

Использование ssh-agent полезно для хранения passphrase в памяти:

$eval "$(ssh-agent -s)"
$ssh-add ~/.ssh/id_rsa

Проверка соединения с помощью модуля ping

На контроллере выполните:

$ansible -m ping node_servers

Ожидаемый успешный ответ:

host1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Если вы видите UNREACHABLE — см. раздел «Устранение неполадок».

Пример простого плейбука: установка nginx

Создайте файл playbook_install_nginx.yml:

---
- hosts: node_servers
  become: true
  tasks:
    - name: Установить nginx
      apt:
        name: nginx
        state: present
      when: ansible_os_family == 'Debian'

    - name: Установить nginx (CentOS)
      yum:
        name: nginx
        state: present
      when: ansible_os_family == 'RedHat'

    - name: Убедиться, что nginx запущен
      service:
        name: nginx
        state: started
        enabled: true

Запуск плейбука:

$ansible-playbook -i /etc/ansible/hosts playbook_install_nginx.yml

Типичные ошибки и способы решения

  1. “Failed to connect to the host via ssh” / UNREACHABLE
  • Причина: SSH недоступен или порт закрыт.
  • Проверьте: ping/ssh к узлу напрямую, firewall (firewalld/ufw), правильность IP в inventory.
  • Команды для проверки:
$ssh -vvv james@192.168.0.2
$sudo firewall-cmd --list-all
$sudo ufw status
  1. Ansible пытается подключиться под неправильным пользователем
  • Решение: указать ansible_ssh_user в inventory или в group_vars, либо передать -u USER при запуске.
  1. Модуль не найден или Python отсутствует на узле
  • Многие модули требуют Python на целевом узле. Для minimal образов установите python3 или укажите ansible_python_interpreter.
  1. Проблемы с правами sudo
  • Убедитесь, что указанный пользователь может выполнять команды с sudo без запроса пароля или настройте become_pass.
  1. Несовместимость версий Ansible / модулей
  • В production целесообразно фиксировать версию Ansible и тестировать плейбуки в staging.

Диагностика: полезные команды

  • Проверка inventory и подключения:
$ansible-inventory --list -y
$ansible node_servers -m setup | less
  • Выполнение ad-hoc команд:
$ansible node_servers -m shell -a "uname -a"
$ansible node_servers -m yum -a "name=vim state=present"    # для RHEL/CentOS
$ansible node_servers -m apt -a "name=vim state=present"    # для Debian/Ubuntu

Рекомендации по безопасности

  • Используйте авторизацию по ключам и ssh-agent.
  • Не храните приватные ключи в репозиториях.
  • Старайтесь не подключаться как root напрямую. Используйте непривилегированный пользователь + become.
  • Ограничьте доступ к контроллеру и управляйте доступом к inventory и group_vars (там может быть информация о пользователях).
  • Защитите /etc/ansible/hosts и файлы с переменными (chmod 640/600 по необходимости).

Настройка ansible.cfg (минимум)

При необходимости создайте файл ansible.cfg в /etc/ansible/ или в каталоге проекта:

[defaults]
inventory = /etc/ansible/hosts
remote_user = james
host_key_checking = False
retry_files_enabled = False
forks = 20

Пункты объяснения:

  • host_key_checking = False — отключает проверку ключа хоста (удобно для тестов, но меньше безопасности).
  • forks — число параллельных исполнителей.

Заметки по совместимости и миграции

  • CentOS 7 обычно использует yum, CentOS 8 — dnf; в плейбуках используйте условные конструкции по ansible_os_family или ansible_distribution_major_version.
  • На минимальных образах cloud/containers может отсутствовать Python — установите python3 или используйте raw-модуль для временной установки Python.

Роли и чек-листы (Role-based checklists)

Для администратора контроллера:

  • Установить Ansible и проверить версию.
  • Настроить SSH-ключи и проверить доступ ко всем узлам.
  • Создать inventory и group_vars.
  • Настроить ansible.cfg и политики логирования.

Для администратора управляемых узлов:

  • Убедиться, что SSH запущен и порт 22 открыт.
  • Установить python3 или предоставить корректный ansible_python_interpreter.
  • Установить базовые утилиты (curl, sudo) по необходимости.

Для разработчика/DevOps команды:

  • Тестировать плейбуки в staging.
  • Писать idempotent задачи (чтобы повторный запуск не ломал систему).
  • Версионировать плейбуки и роли в VCS.

Мини-методология развертывания Ansible в инфраструктуре

  1. Подготовка контроллера: установка Ansible, настройка аккаунтов, ключей и config.
  2. Создание inventory: группировка по окружениям (prod/stage/dev) и ролям (web/db/cache).
  3. Написание простых плейбуков и тестирование на staging.
  4. Внедрение CI для запуска проверок и линтинга плейбуков (ansible-lint).
  5. Постепенное наращивание набора ролей и управление секретами (Ansible Vault или внешние хранилища).

Примеры отказов и когда Ansible может не подойти

  • Сети без доступа по SSH или где запрещено выполнять удалённые команды из-за политики безопасности.
  • Очень ограниченные устройства IoT без Python и без возможности установки агентского ПО.
  • Очень строгие требования к оркестрации на уровне контейнеров — в таких сценариях дополняют Ansible инструментами типа Kubernetes Operators.

Шпаргалка (cheat sheet)

  • Пингуем группу:
$ansible -m ping node_servers
  • Запустить ad-hoc команду:
$ansible node_servers -m shell -a "systemctl restart nginx"
  • Запуск плейбука с инвентарём:
$ansible-playbook -i /etc/ansible/hosts playbook.yml
  • Узнать факты о хосте:
$ansible node_servers -m setup

Контроль приёмки: Критерии приёмки

  • Контроллер успешно подключается к каждому узлу по SSH (ansible -m ping для всех записей в inventory).
  • Плейбук для установки базового пакета выполняется без ошибок и idempotent (повторный запуск не вносит изменений).
  • Настроенная учётная запись имеет права become для выполнения задач, требующих привилегий.

Краткое резюме

Ansible — простой и мощный инструмент для управления конфигурацией через SSH. Для надёжной работы важно корректно настроить SSH-доступ (лучше ключи), inventory и переменные. В статье приведены команды для установки на CentOS 7/8 и Ubuntu, примеры inventory и плейбуков, а также рекомендации по безопасности и устранению типичных проблем.

Важно: в продакшен-среде фиксируйте версии и тестируйте изменения в отдельном окружении перед массовым развёртыванием.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро