Гид по технологиям

Установка и использование Ansible на Debian 11

• 5 min read • DevOps • Обновлено 24 Nov 2025
Установка Ansible на Debian 11
Установка Ansible на Debian 11

Ansible — простой и мощный инструмент управления конфигурацией. В статье показано, как установить Ansible на Debian 11 двумя способами (APT и pip), настроить подключение по SSH (включая sshpass и альтернативу — ключи SSH), создать инвентори и выполнить базовые команды и плейбук для установки nginx. Включены рекомендации по безопасности, типичные ошибки и чек‑листы для контроллера и управляемых узлов.

Сервер с подключением по SSH и значком Ansible

Предпосылки

  • Три сервера с Debian 11.
  • На каждом сервере настроен root‑пароль (для демонстрации). Рекомендуется использовать ключи SSH в продакшне.

Пример сетевой развёртки, используемой в статье:

  • Ansible контроллер — 192.168.10.9
  • Ansible хосты — 192.168.10.10, 192.168.10.11

Краткая терминология

  • Контроллер — машина, где установлен Ansible и откуда выполняются команды.
  • Управляемый узел (host) — сервер, на котором Ansible выполняет задачи.
  • Инвентори — файл или источник, где перечислены управляемые хосты и их параметры.

Установка Ansible на Debian 11 — варианты

Есть два распространённых способа установки:

  1. Через системные репозитории APT (удобно для пакетов, тестированных для Debian/Ubuntu).
  2. Через pip (гибко, актуальные версии, но требует управления Python‑зависимостями).

Установка через APT

  1. Установите зависимости:
apt-get install gnupg2 curl wget -y
  1. Добавьте репозиторий Ansible в /etc/apt/sources.list (или в отдельный файл в /etc/apt/sources.list.d/):
nano /etc/apt/sources.list

Добавьте строку:

deb http://ppa.launchpad.net/ansible/ansible/ubuntu focal main
  1. Добавьте GPG‑ключ. Обратите внимание, что apt-key помечен как устаревший; безопаснее сохранять ключи в /etc/apt/trusted.gpg.d/:
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367

Вы увидите примерно такой вывод:

Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
Executing: /tmp/apt-key-gpghome.lFEjztT9TY/gpg.1.sh --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367
gpg: key 93C4A3FD7BB9C367: public key "Launchpad PPA for Ansible, Inc." imported
gpg: Total number processed: 1
gpg:               imported: 1

Если хотите использовать современный подход, импортируйте ключ так (пример):

curl -fsSL https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x93C4A3FD7BB9C367 | gpg --dearmor > /etc/apt/trusted.gpg.d/ansible.gpg
  1. Обновите индекс и установите Ansible:
apt-get update
apt-get install ansible -y
  1. Проверьте версию:
ansible --version

Пример вывода:

ansible 2.10.8
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.9.2 (default, Feb 28 2021, 17:03:44) [GCC 10.2.1 20210110]

Установка через pip

  1. Установите Python и pip:
apt-get install python3 python3-pip -y
  1. Установите Ansible через pip (по желанию в virtualenv):
pip install ansible

Плюсы/минусы: pip даёт более новые версии, но требует контроля зависимостей и прав Python; APT проще для системной установки.

Настройка SSH: sshpass и безопасная альтернатива

sshpass позволяет передавать пароль в командной строке — удобно для тестов, но небезопасно в продакшне, потому что пароль может быть виден в истории и процессах.

Установка sshpass:

apt-get install sshpass -y

Добавление ключей хоста в known_hosts (пример):

ssh [email protected]

Вас попросят подтвердить отпечаток ключа и ввести пароль. Повторите для второго хоста.

Проверка по паролю (только для тестов):

sshpass -p yourpassword ssh [email protected]

Вместо паролей настоятельно рекомендуется использовать пары SSH‑ключей:

Генерация ключа на контроллере:

ssh-keygen -t ed25519 -C "ansible@controller"

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

ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]

Преимущества ключей: нет хранения открытых паролей в файлах, легче автоматизировать и интегрировать с CI.

Создание файла инвентори

Простейший статический инвентори (не храните пароли в явном виде):

nano ~/.hosts
[servers]
server1 ansible_host=192.168.10.10 ansible_user=root ansible_ssh_pass=password ansible_ssh_port=22
server2 ansible_host=192.168.10.11 ansible_user=root ansible_ssh_pass=password ansible_ssh_port=22

Важно: хранение ansible_ssh_pass в открытом виде — плохая практика. Используйте ansible-vault или внешние менеджеры секретов.

Пример использования ansible-vault для пароля (альтернатива):

ansible-vault encrypt_string 'password' --name 'ansible_ssh_pass'

И добавьте зашифрованную строку в group_vars или host_vars вместо явного пароля.

Работа с Ansible: базовые команды

Общий синтаксис:

ansible -i [inventory_file] -m [module] [host_pattern]

Проверка связи (ping модуль):

ansible -i ~/.hosts -m ping all

Ожидаемый ответ для каждого хоста — SUCCESS и “pong”:

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

Запуск shell‑команды на удалённом хосте:

ansible -i ~/.hosts -m shell -a "free -m" server2

Пример вывода:

server2 | CHANGED | rc=0 >>
               total        used        free      shared  buff/cache   available
Mem:            1982         128         491           2        1363        1669
Swap:              0           0           0

Проверка df:

ansible -i ~/.hosts -m shell -a "df -h" server2

Установка пакета через модуль apt:

ansible -i ~/.hosts -m ansible.builtin.apt -a "name=nginx state=present" server1

Проверка статуса сервиса через shell:

ansible -i ~/.hosts -m shell -a "systemctl status nginx" server1

Создание пользователя через модуль user:

ansible -i ~/.hosts -m ansible.builtin.user -a "name=user1 password=yourpassword" server1

Вы увидите сводку с полями name, home, uid и т.п.

Пример простого плейбука: установить и запустить nginx

Сохраните как install-nginx.yml:

- hosts: servers
  become: true
  tasks:
    - name: Обновить кэш apt
      ansible.builtin.apt:
        update_cache: yes

    - name: Установить nginx
      ansible.builtin.apt:
        name: nginx
        state: present

    - name: Убедиться, что nginx запущен
      ansible.builtin.service:
        name: nginx
        state: started
        enabled: true

Выполнение плейбука:

ansible-playbook -i ~/.hosts install-nginx.yml

Безопасность и управление секретами

  • Не храните пароли в инвентори в открытом виде.
  • Используйте ansible-vault для зашифрованных переменных:
ansible-vault create group_vars/servers/vault.yml
  • Для корпоративной инфраструктуры интегрируйте внешний секрет‑менеджер (HashiCorp Vault, AWS Secrets Manager).

Important: sshpass удобен для тестов, но не для продакшна. SSH‑ключи + vault безопаснее.

Рекомендации по структуре проекта Ansible

Минимальная структура:

ansible-project/
├── hosts
├── playbooks/
│   └── install-nginx.yml
├── group_vars/
│   └── servers.yml
├── host_vars/
└── roles/

Используйте роли для повторного использования и читаемости.

Типичные ошибки и способы устранения

  • “Host key verification failed” — удалите соответствующую запись из ~/.ssh/known_hosts или добавьте ключ вручную.
  • “Failed to parse PID from file” при запуске nginx — проверьте конфигурацию nginx, права на /run и корректность systemd unit.
  • “ansible module not found” — убедитесь, что Python установлен на управляющем узле и на целевых хостах (python3).
  • apt-key warning — используйте хранение ключей в /etc/apt/trusted.gpg.d/ вместо apt-key.
  • “Permission denied” при SSH — проверьте права на ~/.ssh, SELinux/AppArmor, корректность ключей.

Критерии приёмки

  • Контроллер Ansible успешно выполняет ansible -m ping всем хостам.
  • Плейбук install-nginx.yml завершился без ошибок и nginx работает на целевых хостах.
  • В проектах нет открытых паролей в репозитории; секреты зашифрованы через ansible-vault или вынесены в менеджер секретов.

Чек‑лист по ролям

Контроллер:

  • Установлен Ansible и проверена версия.
  • Сконфигурирован инвентори.
  • Секреты зашифрованы или вынесены.

Управляемый узел:

  • SSH доступ для контроллера с ключом.
  • Установлен python3 или python (в зависимости от версии Ansible).
  • Доступные необходимые порты (SSH 22).

Администратор безопасности:

  • Нет паролей в репозиториях.
  • Мониторинг выполнения плейбуков.

Решение когда установка APT не подходит

Альтернатива: установка через pip в virtualenv, либо использовать контейнер/образ с заранее установленным Ansible (Docker image). Для очень строгих окружений используйте пакетные репозитории вашего дистрибутива.

Быстрый метод отката

Если плейбук внёс нежелательные изменения, выполните плейбук для отката (аналогичный плейбук с state: absent или удалением конфигураций) и восстановите конфиги из резервной копии. Всегда тестируйте на staging перед prod.

Короткое руководство по тестированию (acceptance)

  • Выполнить ansible -i ~/.hosts -m ping all
  • Запустить ansible-playbook –check install-nginx.yml (dry run)
  • Запустить ansible-playbook install-nginx.yml и проверить service nginx status

Заключение

Вы узнали, как установить Ansible на Debian 11 через APT и pip, как настроить доступ по SSH, создать инвентори и выполнить базовые команды и плейбук для установки nginx. Основные рекомендации: используйте SSH‑ключи и ansible‑vault для секретов, структурируйте проект с ролями и тестируйте изменения в staging перед продакшеном.

Если хотите, могу помочь с конвертацией текущих сценариев в роли, написать тестовый CI‑пайплайн для Ansible или показать, как подключить HashiCorp Vault.

Примечание: при работе в реальной инфраструктуре избегайте хранения паролей в явном виде и используйте механизмы управления доступом.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро