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

Почему 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
- Установите Python 3 (Ansible требует Python на контроллере и на многих модулях — на целевых узлах тоже):
$sudo yum install python3 -y- Установите репозиторий EPEL (в CentOS 7 он часто нужен):
$sudo yum install epel-release -y- Обновите индекс пакетов и систему:
$sudo yum update -y- Установите Ansible:
$sudo yum install ansible -y- Проверьте версию:
$ansible -vУстановка Ansible на CentOS 8
- Установите Python 3:
$sudo dnf install python3 -y- Установите EPEL (если нужно):
$sudo dnf install epel-release -y- Обновите систему и установите Ansible:
$sudo dnf update -y
$sudo dnf install ansible -y- Проверьте установку:
$ansible -vУстановка Ansible на Ubuntu / Debian
- Установите Python 3 (часто установлен по умолчанию):
$sudo apt-get update -y
$sudo apt-get install python3 -y- Добавьте официальный PPA Ansible (опционально) и установите Ansible:
$sudo apt-add-repository --yes --update ppa:ansible/ansible
$sudo apt-get update -y
$sudo apt-get install -y ansible- Проверьте версию:
$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Типичные ошибки и способы решения
- “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- Ansible пытается подключиться под неправильным пользователем
- Решение: указать ansible_ssh_user в inventory или в group_vars, либо передать -u USER при запуске.
- Модуль не найден или Python отсутствует на узле
- Многие модули требуют Python на целевом узле. Для minimal образов установите python3 или укажите ansible_python_interpreter.
- Проблемы с правами sudo
- Убедитесь, что указанный пользователь может выполнять команды с sudo без запроса пароля или настройте become_pass.
- Несовместимость версий 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 в инфраструктуре
- Подготовка контроллера: установка Ansible, настройка аккаунтов, ключей и config.
- Создание inventory: группировка по окружениям (prod/stage/dev) и ролям (web/db/cache).
- Написание простых плейбуков и тестирование на staging.
- Внедрение CI для запуска проверок и линтинга плейбуков (ansible-lint).
- Постепенное наращивание набора ролей и управление секретами (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 и плейбуков, а также рекомендации по безопасности и устранению типичных проблем.
Важно: в продакшен-среде фиксируйте версии и тестируйте изменения в отдельном окружении перед массовым развёртыванием.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента