Задание №5: Автоматизация с Ansible на сервере BR-SRV
В данном задании на сервере филиала (BR-SRV) развёртывается система управления конфигурациями Ansible.
Сервер BR-SRV выступает управляющим узлом (Control Node). На нём формируется инвентарный файл со всеми ключевыми машинами инфраструктуры (HQ-SRV, HQ-CLI, HQ-RTR, BR-RTR), задаются параметры подключения по нестандартному порту SSH 2026, и проверяется доступность узлов без интерактивных запросов паролей и отпечатков ключей.
Место выполнения
- Основные действия выполняются под пользователем
rootна сервере BR-SRV (br-srv.au-team.irpo). - Предварительно на целевых узлах HQ-RTR, BR-RTR и HQ-CLI активируется служба OpenSSH на порту
2026.
1. Теоретическая справка: безагентная архитектура Ansible
Ansible — популярная система управления конфигурациями и оркестрации, построенная по безагентной (Agentless) архитектуре:
- На управляемые узлы (Managed Nodes) не требуется устанавливать специальные службы или фоновые демоны.
- Всё управление происходит по стандартному протоколу SSH с передачей модулей на языке Python.
- В качестве инвентаря используется простой текстовый файл
/etc/ansible/hosts, где перечисляются целевые хосты и переменные подключения (ansible_user,ansible_password,ansible_port).
Зачем нужен пакет sshpass?
По умолчанию клиент SSH требует интерактивного ввода пароля с клавиатуры (TTY). Утилита sshpass позволяет Ansible передавать пароль в сессию SSH в автоматическом неинтерактивном режиме без необходимости предварительной ручной генерации и копирования SSH-ключей (ssh-copy-id).
Параметры конфигурационного файла ansible.cfg:
host_key_checking = False— отключает проверку отпечатков SSH-ключей (Host Key Checking). Предотвращает появление интерактивного диалогаAre you sure you want to continue connecting (yes/no)?, который привёл бы к зависанию автоматических задач.interpreter_python = /usr/bin/python3— явно задаёт интерпретатор Python на целевых машинах, подавляя предупреждения автопоиска (Python discovery warning).inventory = /etc/ansible/hosts— путь к файлу инвентаря по умолчанию.
2. Предварительные требования: включение SSH на узлах HQ-RTR, BR-RTR и HQ-CLI
Важное примечание для участников
В Модуле №1 безопасный SSH настраивался только на серверах. Чтобы система Ansible смогла подключиться к маршрутизаторам и клиентской машине, необходимо убедиться, что служба OpenSSH активна и слушает порт 2026 на машинах HQ-RTR, BR-RTR и HQ-CLI.
Выполните следующие действия на машинах HQ-RTR, BR-RTR и HQ-CLI под пользователем root:
1. Проверяем наличие строки с портом в конфигурации:
В файле уже может быть прописана нужная строка, поэтому сначала проверяем файл:
grep -i "^Port" /etc/openssh/sshd_config- Если строка
Port 2026уже присутствует в файле — редактировать ничего не нужно. Сразу переходите к пункту 2 (включение в автозапуск и перезапуск). - Если строки нет (или указан стандартный порт) — открываем файл и добавляем нужный порт:
vim /etc/openssh/sshd_configПамятка по работе в Vim
- Вход в режим редактирования: нажмите клавишу
i. - Выход в командный режим: нажмите
Esc. - Сохранить и выйти: введите
:wqи нажмитеEnter(или:q!для отмены и выхода без сохранения).
Добавляем в начало файла строку:
Port 2026Быстрая проверка и добавление в одну строчку
Можно использовать автоматическую команду (добавит Port 2026, только если строки ещё нет):
grep -q "^Port 2026" /etc/openssh/sshd_config || sed -i '1i Port 2026' /etc/openssh/sshd_config2. Включаем службу в автозапуск и перезапускаем:
Обязательно активируем автозапуск и перезапускаем демон sshd:
systemctl enable --now sshd
systemctl restart sshd3. Проверка прослушивания порта:
ss -tlpn | grep 2026(В выводе должен присутствовать процесс sshd, слушающий *:2026).
3. Настройка управляющего узла на сервере BR-SRV
Все дальнейшие действия выполняются на BR-SRV под пользователем root:
Шаг 1. Установка Ansible и вспомогательной утилиты sshpass
# Обновляем кэш пакетов и устанавливаем ansible вместе с sshpass:
apt-get update && apt-get install ansible sshpass -yШаг 2. Создание файла глобальной конфигурации /etc/ansible/ansible.cfg
Сохраняем резервную копию и создаём чистый файл конфигурации:
# Делаем резервную копию исходного файла (если он существовал)
cp -r /etc/ansible/ansible.cfg /etc/ansible/ansible.cfg.back
# Удаляем старый файл конфигурации
rm -rf /etc/ansible/ansible.cfg
# Создаём новый конфигурационный файл
nano /etc/ansible/ansible.cfgВставляем следующее содержимое:
[defaults]
host_key_checking = False
interpreter_python=/usr/bin/python3
inventory = /etc/ansible/hostsШаг 3. Формирование файла инвентаря /etc/ansible/hosts
Открываем файл инвентаря:
nano /etc/ansible/hostsВносим параметры подключения для каждого узла:
HQ-SRV ansible_user=user ansible_password=resu ansible_port=2026
HQ-RTR ansible_user=net_admin ansible_password=P@ssw0rd ansible_port=2026
BR-RTR ansible_user=net_admin ansible_password=P@ssw0rd ansible_port=2026
HQ-CLI ansible_user=user ansible_password=resu ansible_port=2026Разбор параметров инвентаря:
- Имена хостов (
HQ-SRV,HQ-RTR,BR-RTR,HQ-CLI) разрешаются через DNS доменаau-team.irpoили системный файл/etc/hosts. ansible_userиansible_password— учетные записи пользователей, настроенные в Модуле №1 (для серверов/клиентов —user:resu, для маршрутизаторов —net_admin:P@ssw0rd).ansible_port=2026— порт службы OpenSSH, защищённый в Модуле №1 и предварительно включённый на узлах.
4. Проверка доступности хостов через Ansible
Запускаем встроенный ad-hoc модуль ping для всех хостов из инвентаря:
ansible all -m pingЧто делает команда:
all— цель (все хосты из файла инвентаря).-m ping— вызов модуляping(Ansible подключается по SSH, проверяет наличие Python и возвращает ответpong). Это не ICMP-пинг, а полноценная проверка работоспособности SSH и авторизации!
Пример ожидаемого вывода:
HQ-SRV | SUCCESS => {
"changed": false,
"ping": "pong"
}
HQ-RTR | SUCCESS => {
"changed": false,
"ping": "pong"
}
BR-RTR | SUCCESS => {
"changed": false,
"ping": "pong"
}
HQ-CLI | SUCCESS => {
"changed": false,
"ping": "pong"
}Все 4 машины должны вернуть статус SUCCESS и значение "ping": "pong" зелёным цветом без ошибок и предупреждений!
5. Возможные проблемы и диагностика (Troubleshooting)
| Ошибка | Причина | Способ решения |
|---|---|---|
Could not resolve hostname | Имя хоста не преобразуется в IP-адрес | Проверьте /etc/resolv.conf (должен быть IP контроллера домена Samba DC 127.0.0.1 или 192.168.3.10) либо добавьте сопоставление в /etc/hosts. |
Permission denied (publickey,password) | Неверный логин или пароль | Проверьте учетные данные в строке инвентаря: для роутеров net_admin:P@ssw0rd, для серверов user:resu. |
Connection refused | Порт SSH закрыт или недоступен | Проверьте, добавлен ли Port 2026 в /etc/openssh/sshd_config и запущен ли демон sshd на целевом узле (systemctl status sshd). |
to use the 'ssh' connection type with passwords, you must install the sshpass program | Не установлена утилита sshpass | Выполните apt-get install sshpass -y на управляющем узле BR-SRV. |
Итог выполнения Задания №5
Управляющий узел Ansible на BR-SRV полностью настроен и готов к автоматизированному управлению инфраструктурой без запроса ключей и паролей.
