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

Предпосылки
- Три сервера с Debian 11.
- На каждом сервере настроен root‑пароль (для демонстрации). Рекомендуется использовать ключи SSH в продакшне.
Пример сетевой развёртки, используемой в статье:
- Ansible контроллер — 192.168.10.9
- Ansible хосты — 192.168.10.10, 192.168.10.11
Краткая терминология
- Контроллер — машина, где установлен Ansible и откуда выполняются команды.
- Управляемый узел (host) — сервер, на котором Ansible выполняет задачи.
- Инвентори — файл или источник, где перечислены управляемые хосты и их параметры.
Установка Ansible на Debian 11 — варианты
Есть два распространённых способа установки:
- Через системные репозитории APT (удобно для пакетов, тестированных для Debian/Ubuntu).
- Через pip (гибко, актуальные версии, но требует управления Python‑зависимостями).
Установка через APT
- Установите зависимости:
apt-get install gnupg2 curl wget -y- Добавьте репозиторий 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- Добавьте 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- Обновите индекс и установите Ansible:
apt-get update
apt-get install ansible -y- Проверьте версию:
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
- Установите Python и pip:
apt-get install python3 python3-pip -y- Установите 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.
Примечание: при работе в реальной инфраструктуре избегайте хранения паролей в явном виде и используйте механизмы управления доступом.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента