
Cистемные администраторы и DevOps-инженеры управляют десятками и даже сотнями серверов. Ежедневно приходится разворачивать на них новые сервисы, обновлять ПО и следить за безопасностью. Ручное решение этих задач на каждой машине отнимает время и может привести к ошибкам.
Для автоматизации рутины разработали специальное ПО, которое помогает упростить процесс настройки и управления. Один из таких инструментов — система управления конфигурациями Ansible. В статье разберёмся, что такое Ansible, как он устроен и для каких задач используется.
Что такое Ansible
Это инструмент автоматизации с открытым исходным кодом. Он позволяет выполнять действия на множестве серверов одновременно. С помощью платформы можно вносить на целевые хосты любые изменения: устанавливать ПО, управлять пользователями, делать бэкапы и многое другое.
Пример некоторых задач, которые решает Ansible:
- Управление конфигурацией. Например, нужно установить nginx на 10 серверов, создать пользователя и скопировать конфигурационный файл. С Ansible не придётся разворачивать инфраструктуру вручную на каждой машине: достаточно один раз написать сценарий (внести изменения в Playbook), который выполнит все шаги автоматически.
- Установка приложений. Ansible автоматизирует процесс развёртывания нового ПО на серверах. Например, компания выпустила новую версию: нужно остановить старую версию, скачать новый код из системы контроля Git, установить зависимости и запустить приложение. С помощью Ansible можно разворачивать новые версии приложений на всех серверах одновременно или по очереди.
- Сбор информации о хосте. ПО можно использовать для автоматического сбора данных об устройстве: версии ОС, оперативной памяти, диске, процессоре и других компонентах системы.
В отличие от многих систем управления конфигурациями, например, Puppet и Chef, Ansible работает без агентов, используя для установки соединения и управления целевыми хостами стандартный, криптографически защищённый протокол SSH. Такой подход минимизирует затраты на внедрение, снижает нагрузку на систему и исключает уязвимости, связанные с работающим сторонним ПО на сервере.
Как работает Ansible
Архитектура программы состоит из четырёх ключевых компонентов:
- Control Node (Управляющий узел). Сервер, на котором установлен Ansible. Управляющим узлом может быть домашний или рабочий ноутбук, выделенный или облачный сервер с ОС Linux или UNIX. На ОС Windows возможна установка через компонент WSL.
- Inventory (Файл инвентаризации). В нём указывают список управляемых хостов.
- Playbook. Содержит упорядоченный список задач, которые необходимо выполнить на группе серверов из инвентарного файла. Пишется на языке разметки YAML.
- Modules (Модули). Код для решения разных задач. Например, компонент copy используется для копирования файла, user — для работы с пользователями, service — со службами. Существует множество компонентов, работающих с облачными провайдерами (AWS, GCP, Azure), Docker, базами данных, сетевым оборудованием и т. д.
Ansible работает по следующему принципу. Пользователь создаёт сценарии на языке YAML и описывает, какие действия нужно выполнить на серверах. При запуске Ansible подключается к целевым хостам по SSH-протоколу и выполняет модули — последовательно решает задачи. Каждый модуль возвращает результат в формате JSON, а Ansible анализирует эти данные и отображает ход выполнения.

Ключевая особенность платформы — принцип идемпотентности: если система соответствует нужной конфигурации, изменения не вносятся. Такой принцип работы делает процессы предсказуемыми и безопасными даже при многократном запуске одного сценария.
Ansible отслеживает результат выполнения каждой задачи и сообщает о статусе: было ли действие успешным, привело ли к изменениям в системе или завершилось ошибкой.
Установка Ansible
Рассмотрим процесс установки на ОС Ubuntu 24.04, Debian 13, CentOS 9 и macOS.
Установка на Ubuntu 24.04
Для работы понадобится интерпретатор Python. Сначала проверьте его предустановку. Для этого выведите его версию с помощью команды:
python3 --version
Если команда вернула версию, Python установлен. Сообщение об ошибке
Command 'python3' not found
означает, что его нужно установить. Для этого установите пакет software-properties-common:sudo apt update && sudo apt -y install python3 software-properties-common
Установите Ansible с помощью официального репозитория от разработчиков. Для этого добавьте репозиторий в систему:
sudo add-apt-repository --yes --update ppa:ansible/ansible
Установите пакет Ansible:
sudo apt -y install ansible
Проверьте корректность установки с помощью вывода версии Ansible:
ansible --version

Установка на Debian 13
Проверьте, установлен ли интерпретатор Python в системе:
python3 --version
При необходимости установите его с помощью команды:
sudo apt update && sudo apt -y install python3
Установите Ansible из официального репозитория Debian:
sudo apt -y install ansible
Проверьте корректность установки с помощью вывода версии Ansible:
ansible --version

Установка на CentOS 9
Проверьте, установлен ли Python в системе:
python3 --version
При его отсутствии установите интерпретатор с помощью команд:
sudo dnf -y install python3
По умолчанию Ansible отсутствует в официальном репозитории CentOS. Но он есть в пакетном репозитории epel. Установите пакет epel-release:
sudo dnf -y install epel-release
Установите Ansible:
sudo dnf -y install ansible
Проверьте корректность установки с помощью вывода версии Ansible:
ansible --version

Установка на macOS
Установить Ansible на операционной системе macOS можно только с помощью пакетного менеджера Homebrew.
Установите Homebrew, выполнив команду в терминале:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Установите Ansible с помощью команды:
brew install ansible
Проверьте корректность установки с помощью вывода версии Ansible:
ansible --version

Настройка Ansible
Чтобы Ansible смог подключаться к управляемым серверам, сгенерируйте SSH-ключ:
ssh-keygen

Скопируйте публичный ключ на управляемый сервер:
ssh-copy-id root@5.129.252.55

Откройте основной конфигурационный файл — ansible.cfg с помощью любого текстового редактора, например, nano. Он находится в директории /etc/ansible.
nano /etc/ansible/ansible.cfg
Настройте его конфигурацию:
[defaults] inventory = /etc/ansible/hosts remote_user = root private_key_file = ~/.ssh/id_ed25519 host_key_checking = False pipelining = True deprecation_warnings = True
Параметры конфигурации:
inventory = /etc/ansible/hosts
Путь к файлу инвентаризации. Содержит адреса серверов для выполнения задач Ansible. В примере Ansible будет искать хосты в файле /etc/ansible/hosts.
remote_user = root
Имя пользователя, которое Ansible будет использовать для подключения к управляемым хостам. Пользователь должен быть заранее создан на сервере.
private_key_file = ~/.ssh/id_ed25519
Путь к файлу приватного SSH-ключа. Ansible использует этот ключ для аутентификации на управляемых хостах.
host_key_checking = False
Отключает проверку SSH-хост-ключа, что позволяет автоматически подключаться к любым серверам без подтверждения их подлинности. Это критически важно для автоматизации в динамических средах (например, в CI/CD), где постоянно создаются новые инстансы.
pipelining = True
Включает конвейеризацию SSH. Вместо того чтобы копировать Python-скрипт на удалённый хост, запускать его и удалять, Ansible передаёт скрипт через stdin в открытую SSH-сессию. Опция предназначена для увеличения производительности.
deprecation_warnings = True
Включает предупреждения об устаревших функциях, модулях или синтаксисе, которые используются в плейбуках.
Настройте файл инвентаризации. Для этого откройте на редактирование файл hosts:
nano /etc/ansible/hosts
Укажите IP-адрес сервера, сохраните изменения и выйдите из файла.
Проверьте доступность хоста с помощью встроенного модуля ping в Ansible:
ansible all -m ping
Если подключение по SSH настроено корректно, то Ansible вернёт успешный ответ, как на скриншоте.

Что такое Playbook в Ansible
Playbook — это файл, где пользователь прописывает инструкцию, что и как нужно сделать на сервере. Ключевые элементы плейбука:
Tasks (Задачи). Задача вызывает модуль и выполняет определённое действие. Пример задачи, которая устанавливает nginx, используя модуль apt
:
tasks:
- name: Install Nginx with apt
apt:
name: nginx
state: present
Variables (Переменные). Это контейнеры для хранения значений различных типов данных. Переменные можно использовать повторно и адаптировать под разные окружения, например, разработку, тестирование, продакшен.
Переменные решают следующие задачи:
- Параметризация. Пользователь меняет конкретные значения в плейбуке на ссылки к переменным. Это позволяет запустить один и тот же плейбук с разными данными без изменения его исходного кода.
- Разделение кода и конфигурации. Критически важные данные (пароли, IP-адреса, имена конкретных серверов) выносятся из плейбука в отдельные файлы. Это повышает безопасность и упрощает управление конфигурацией.
Объявлять переменные можно не только в теле плейбука, но и в инвентарном файле (inventory), в файлах переменных (например, в форматах YAML или JSON), а также напрямую через аргументы командной строки во время запуска плейбука.
В качестве примера рассмотрим переменную с именем http_port
, которой присвоено целочисленное значение 80, определяющее номер сетевого порта.
vars:
http_port: 80
tasks:
- name: Copy customized index.html
copy:
content: "Welcome to server on port {{ http_port }}"
dest: /var/www/html/index.html
Handlers (Обработчики). Это специальные задачи, которые запускаются только по уведомлению от других задач. Чаще всего используются для перезагрузки служб после изменения их конфигурации. Пример — команда handler, которая перезапускает службу nginx.
tasks:
- name: Copy Nginx config
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: Restart Nginx
handlers:
- name: Restart Nginx
service:
name: nginx
state: restarted
Популярные модули
Рассмотрим примеры популярных модулей Ansible.
copy
Копирует файлы или директории с управляющего узла на серверы.
- name: Copy a file
copy:
src: /root/configs/index.html
dest: /var/www/html/index.html
owner: root
mode: '0644
apt/dnf
Управляет пакетами в Debian-based системах (Ubuntu, Linux Mint) и RHEL (CentOS, Fedora).
- name: Install the latest version of tree
apt:
name: tree
state: latest
- name: Install the latest version of htop
dnf:
name: htop
state: latest
service
Управляет состоянием служб (start, stop, restart, enable).
- name: Ensure Nginx is running and enabled
service:
name: nginx
state: started
enabled: yes
Запускаем свой первый плейбук Ansible
Для наглядной работы Ansible создадим и запустим плейбук, который выполнит следующие действия:
- установит пакеты: net-tools, tree, mc, htop;
- создаст нового пользователя с именем new-user1;
- создаст текстовый файл с именем ansible-file-create.txt и содержимым «Hello from Ansible!».
Пошаговая последовательность действий:
Создайте директорию, где будут храниться файлы плейбука, и перейдите в неё:
mkdir first-playbook && cd first-playbook
Создайте основной файл плейбука:
nano playbook-tasks.yml
Введите конфигурацию:
--- - name: Установка пакетов и настройка системы hosts: all become: yes tasks: - name: Установка пакетов package: name: - net-tools - tree - mc - htop state: present tags: packages - name: Создание нового пользователя new-user1 user: name: new-user1 state: present create_home: yes shell: /bin/bash tags: user - name: Создание текстового файла с содержимым copy: content: "Hello from Ansible!" dest: /home/new-user1/ansible-file-create.txt owner: new-user1 group: new-user1 mode: '0644' tags: file
При запуске плейбука укажите файл инвентаризации из директории
/etc/ansible
, который мы использовали ранее в разделе «Установка и настройка Ansible». Итоговая команда для запуска:ansible-playbook -i /etc/ansible/hosts playbook-tasks.yml

- Когда плейбук завершит свою работу, можно проверить результаты:
ansible all -i /etc/ansible/hosts -a "dpkg -l net-tools tree mc htop"

ansible all -i /etc/ansible/hosts -a "id new-user1"

ansible all -i /etc/ansible/hosts -a "cat /home/new-user1/ansible-file-create.txt"

Коротко об Ansible: что это и как работает
Ansible — это инструмент автоматизации с открытым исходным кодом, который позволяет выполнять действия на множестве серверов одновременно.
Основу системы составляют три компонента: инвентарь со списком серверов, понятные YAML-сценарии (плейбуки) и богатая коллекция модулей. Ansible не использует дополнительные агенты на серверах, а подключается к ним напрямую по протоколу SSH. Вместо ручной установки специального ПО на управляемые машины Ansible отправляет на них небольшие команды (модули), которые выполняют нужные действия.