Установка и настройка 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
В примере два блока:
- На всех хостах (
hosts: all) запускаются ролиprepare,install,settings; сбор фактов (gather_facts: yes), подключение отroot, переменнаяapp_ver: 14. - На узле
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 на целевых хостах.- Ключи под root —
ssh-copy-idдляrootтребует разрешённого входа по SSH от суперпользователя; на проде лучше служебный пользователь сsudo. ansible-corevsansible—coreсодержит только движок и базовые модули; для полного набора коллекций ставьте метапакет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.