2026-09-19
Установка и настройка Ansible на Linux: инвентарь, плейбуки и решение проблем

Установка и настройка Ansible на Linux: инвентарь, плейбуки и решение проблем

Ansible — система управления конфигурациями без агентов: подключается к серверам по SSH, выполняет задачи из плейбуков и не требует установки клиента на управляемых хостах. Инструкция подойдёт для Ubuntu, Debian, Astra Linux, Rocky и CentOS.

Актуальные версии на сентябрь 2026: ansible-core 2.21.4 и метапакет ansible 14.4.0 (коллекции).


Установка

Из репозитория

Ubuntu / Debian / Astra Linux:

apt update
apt install ansible

CentOS / Rocky:

В базовом репозитории Ansible нет — подключаем EPEL:

yum install epel-release
yum install ansible

РЕД ОС:

dnf install ansible

Как модуль Python (универсальный способ)

Ставим pip:

# Debian / Ubuntu / Astra
apt install python3-pip

# Rocky / РЕД ОС
dnf install python3-pip

Устанавливаем ядро Ansible:

python3 -m pip install ansible-core

Конкретная версия:

python3 -m pip install ansible-core==2.21

Список версий — на pypi.org.

Проверка:

ansible --version

Коллекции

Рекомендуется сразу поставить стандартные коллекции:

ansible-galaxy collection install community.general

Начальная настройка и тестовый запуск

Инвентарный файл

В нём хранятся хосты, группы и переменные.

1. Формат ini (по умолчанию):

vi /etc/ansible/hosts
[test_servers]
192.168.1.100
192.168.1.101

Создана группа test_servers из двух серверов.

2. Формат yml:

mkdir /etc/ansible/inventory
vi /etc/ansible/inventory/test_servers.yml
---
test_servers:
  vars:
    ansible_python_interpreter: /usr/bin/python3
  hosts:
    server01:
      ansible_ssh_host: 192.168.1.100
      ansible_ssh_port: 22
    server02:
      ansible_ssh_host: 192.168.1.101
      ansible_ssh_port: 22
    server03:
      ansible_connection: local

Группа test_servers из трёх серверов: server01 и server02 с адресами 192.168.1.100 и 192.168.1.101, а server03 — локальный (local). Адреса можно не указывать, если имена разрешаются через DNS; порт — если он стандартный (22). Также задана переменная ansible_python_interpreter.

Конфигурация Ansible

vi /etc/ansible/ansible.cfg

В новых версиях файл может не создаваться — создаём каталог и файл:

mkdir -p /etc/ansible
vi /etc/ansible/ansible.cfg

Раскомментируем и приводим к виду:

[defaults]
host_key_checking = False
interpreter_python = auto_silent

host_key_checking = False — автоматически принимать SSH fingerprint без ввода yes.
interpreter_python = auto_silent — искать Python на целевом хосте без предупреждений.

Тестовый запуск

ansible -m ping test_servers -u root -kK

Проверка доступности серверов группы test_servers от root.

С yml-инвентарём:

ansible -i /etc/ansible/inventory/test_servers.yml -m ping test_servers -u root -kK

Локально:

ansible -m ping localhost --connection=local

Пример ответа:

192.168.1.100 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

Подключение без пароля (SSH-ключи)

Генерируем пару ключей:

ssh-keygen -t ed25519

Нажимаем Enter на все запросы (путь по умолчанию, без пароля):

Your identification has been saved in /root/.ssh/id_ed25519
Your public key has been saved in /root/.ssh/id_ed25519.pub

Ключи созданы под root в /root/.ssh.

Копируем публичный ключ на все серверы:

ssh-copy-id -i /root/.ssh/id_ed25519.pub root@192.168.1.100
ssh-copy-id -i /root/.ssh/id_ed25519.pub root@192.168.1.101

Вручную — добавить содержимое id_ed25519.pub в authorized_keys нужного пользователя:

mkdir -p /root/.ssh
vi /root/.ssh/authorized_keys

Проверяем вход без пароля:

ssh root@192.168.1.100

И запускаем Ansible без паролей:

ansible -m ping test_servers -u root
ansible -i /etc/ansible/inventory/test_servers.yml -m ping test_servers -u root

Использование плейбуков

Плейбук — файл со списком задач и/или ролей, переменных и параметров запуска:

vi my_play.yml
- hosts: all
  gather_facts: yes
  user: root
  vars:
    app_ver: 14
  roles:
    - role: prepare
    - role: install
    - role: settings

- hosts: server1
  gather_facts: no
  user: root
  tasks:
    - name: install curl
      package:
        name: curl
        state: present

В примере два блока:

  1. На всех хостах (hosts: all) запускаются роли prepare, install, settings; сбор фактов (gather_facts: yes), подключение от root, переменная app_ver: 14.
  2. На узле server1 — установка пакета curl.

Запуск:

ansible-playbook -i /etc/ansible/inventory/test_servers.yml ./my_play.yml

Решение возможных проблем

Failed to connect to the host

Причина: нет прав на подключение к удалённому хосту по SSH.

Решение: проверьте вход вручную:

ssh root@192.168.1.100

Если подключиться не удалось — неверный пароль или вход по SSH для root запрещён. Создайте служебную учётную запись на удалённом сервере:

useradd ansible
passwd ansible

И проверяйте от неё:

ansible -m ping test_servers -u ansible -kK

Python Module not found

Причина: не установлен нужный Python-модуль или его версия не подходит.

Решение: ставим модуль через pip. Например, для ошибки:

Python Module not found: firewalld and its python module are required ...
python3 -m pip install firewall

При ошибке No module named pip — установите пакет python3-pip.

No module named ‘ansible.module_utils.six.moves’

Причина: несовместимость версий Ansible и Python (например, Ansible 2.9 и Python 3.12).

Решение: обновить Ansible. Проверяем версию:

ansible --version

Deb-системы:

apt update
apt install ansible

RPM-системы:

dnf install ansible

Если встроенный репозиторий содержит устаревшую версию (частая ситуация в DEB), подключаем репозиторий разработчика:

apt install software-properties-common
apt-add-repository ppa:ansible/ansible
apt install ansible

Тонкости и подводные камни

  • host_key_checking = False — удобно для автоматизации, но снижает безопасность: доверяйте только своей сети.
  • interpreter_python = auto_silent — убирает предупреждения о поиске Python на целевых хостах.
  • Ключи под rootssh-copy-id для root требует разрешённого входа по SSH от суперпользователя; на проде лучше служебный пользователь с sudo.
  • ansible-core vs ansiblecore содержит только движок и базовые модули; для полного набора коллекций ставьте метапакет ansible или отдельные коллекции через ansible-galaxy.
  • Инвентарь yml — требует опции -i, ini-формат в /etc/ansible/hosts подхватывается по умолчанию.

Шпаргалка

# установка
apt install ansible              # Ubuntu/Debian/Astra
yum install epel-release ansible # CentOS/Rocky
python3 -m pip install ansible-core

# инвентарь
vi /etc/ansible/hosts

# конфиг
vi /etc/ansible/ansible.cfg      # host_key_checking = False

# проверка
ansible -m ping test_servers -u root -kK

# ключи
ssh-keygen -t ed25519
ssh-copy-id -i /root/.ssh/id_ed25519.pub root@192.168.1.100

# плейбук
ansible-playbook -i /etc/ansible/inventory/test_servers.yml ./my_play.yml

Проверено на: Ubuntu 22.04/24.04/26.04, Rocky Linux + ansible-core 2.21.4.
Дата: Сентябрь 2026.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *