Установка Ansible на Ubuntu Server 22.04.1

02.09.2025

Введение

В статье описана установка Ansible на Ubuntu, минимальная настройка для начала работы и создание вашего первого плейбука. Вы узнаете, как подготовить управляющую машину, прописать целевые хосты в инвентаре и написать простой сценарий автоматизации для проверки связи и создания тестового файла.

Подготовка системы

Тут всё как всегда: обновляем список пакетов и ставим апдейты

sudo apt update && sudo apt upgrade -y

Устанавливаем Ansible

Если вы в первый раз устанавливаете Ansible, рекомендую ставить сразу полный пакет. например через pipx

sudo apt install pipx
sudo apt install software-properties-common -y

Если устанавливали через pipx, то нужно добавить PATH под local/bin

export PATH=$PATH:~/.local/bin
source ~/.bashrc

Или через apt с добавлением репозитория ansible

sudo apt-add-repository --yes --update ppa:ansible/ansible
sudo apt install ansible -y

Стандартная проверка установленного пакета версией

ansible --version
/etc/ansible/config.cfg — конфигурационный файл /home/user/.ansible/plugins/modules — модули ansible

Настройка SSH для Ansible

Принцип работы asible заключается в том, что у него нет агентов. Все подключения к хостам проходят по SSH. И тут нужно обезопаситься.

Нам нужно сейчас сгенерировать ключи на удаленной машине, к которй будет подключаться ansible.

ssh-keygen -t rsa -b 4096 -C email@domain.ru

По пути на все вопросы нажимаем Enter. По завершению ключи будут лежать тут: ~/.ssh в виде файлов id_rsa и id_rsa.pub.

Установка ключей хостов на Ansible

Теперь, для доступа ansible к хостам, нужно установить сгенерированные ключи на сервере ansible. Быстрее всего это можно сделать при помощи команды ssh-copy-id:

ssh-copy-id ubuntu@192.168.0.101

Теперь подключение к хосту через ssh будет выполняться без запроса пароля.

Можно руками вставить содержимое ключа id_rsa.pub можно в файл ~/.ssh/authorized_keys на сервере. Но лучше так не делать.
Для явного указания пути к ключу (если используется нестандартный), можно настроить ansible.cfg или передавать флаг --private-key при запуске.

Настройка Ansible

Можно сразу создать структуру проекта ansible командой:

ansible-galaxy init /home/user/ansible-project
ansible-project/           # Корневая директория вашего проекта
├── playbook.yml           # -- Ваш главный плейбук (может называться site.yml, main.yml и т.д.)
├── inventory/             # Каталог с файлами inventory (списками хостов)
│   ├── production         # Файл с хостами для production-окружения
│   └── staging            # Файл с хостами для staging-окружения
├── group_vars/            # Переменные для групп хостов
│   └── all.yml            # Переменные для группы [all]
├── host_vars/             # Переменные для конкретных хостов
│   └── web-server-01.yml
├── roles/                 # -- КАТАЛОГ С РОЛЯМИ (здесь хранится основная логика)
│   ├── common/            # Роль 'common'
│   │   ├── tasks/
│   │   │   └── main.yml
│   │   ├── handlers/
│   │   │   └── main.yml
│   │   ├── templates/
│   │   ├── files/
│   │   └── defaults/
│   │       └── main.yml
│   └── webserver/         # Роль 'webserver'
│       ├── tasks/
│       │   └── main.yml
│       └── ... другие директории роли
└── ansible.cfg            # Конфигурационный файл для данного проекта

Или, для простототы и наглядности создадим что-то попроще.

mkdir ~/my-ansible-playbooks
cd ~/my-ansible-playbooks

Создадим host.ini. Это будет наш Inventory. Inventory — это список хостов, с которыми наш Ansible будет работать. Обычно используется формат *.YAML (но это может быть и INI).

По умолчанию ansible ищет хостов в этом файле: /etc/ansible/hosts.

nano hosts.ini
[servers]
192.168.0.101 ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/id_rsa  

Для проверки отправим ping

ansible all -i hosts.ini -m ping

На что получим pong в ответ. Теперь создадим нашь первый playbook

nano first-playbook.yml
- name: First Test
  hosts: all
  become: false 
  
  tasks:
    - name: new file test.txt
      ansible.builtin.copy:
        content: |
          File content
        dest: "~/test.txt"
        mode: '0644'

Этот playbook обращается ко всем хостам из inventory hosts.ini и создаёт файл test.txt с содержимом внутри: "File content"

Для запуска playbook нужно выполнить команду ниже. Можно указывать полные пути до файлов hosts.ini или playbook.

ansible-playbook -i hosts.ini first-playbook.yml

Как видим, файл test.txt был успешно создан на хост машине с теми параметрами, которые мы задавали выше в плейбуке.

Заключение

Ansible — это мощный инструмент автоматизации для управления конфигурацией, развертывания приложений и оркестрации инфраструктуры. Его ключевые преимущества: простота использования на основе YAML-синтаксиса, идемпотентность и агентлесс-архитектура, что делает его идеальным для DevOps.

С помощью плейбуков можно не только настраивать серверы, но и автоматизировать обновления, управлять пользователями, развертывать сложные кластеры, создавать резервные копии и даже останавливать службы по расписанию. Это универсальный инструмент для эффективного и надежного управления IT-инфраструктурой любого масштаба.

Автору на кофе ☕ или просто поднять мотивацию писать больше статей для вас 😉 !
Отдельное спасибо всем, кто отправляет донатики 😀! Очень приятно и неожиданно. Благодаря вам сайт может и в дальнейшем обходиться без рекламных баннеров.
199