====== Базовая настройка Ansible и SSH-ключей ====== ===== Ansible Docs ===== [[#prep|1. Подготовка]] [[#keys|2. SSH Ключи]] [[#inventory|3. Файл Inventory]] [[#config|4. Конфигурация]] [[#test|5. Проверка связи]] ====== Базовая настройка Ansible ====== Развертывание управляющего узла (Control Node) и настройка доступа к управляемым серверам (Managed Nodes) без пароля. ===== 1. Подготовка управляемых и управляющего узла ===== ==== На управляемых узлах (Клиенты) ==== Для работы Ansible на клиентах не нужно ставить агентов, достаточно включенного SSH-сервера. Убедитесь, что он работает на всех машинах, которыми вы планируете управлять: Copy systemctl enable --now sshd ==== На управляющем сервере (Control Node) ==== Установите сам пакет Ansible на главную машину: Copy apt-get update && apt-get install -y ansible ===== 2. Настройка беcпарольного доступа (SSH Ключи) ===== Сгенерируйте пару SSH-ключей на управляющем сервере (нажимайте Enter, оставляя все параметры по умолчанию, парольную фразу (passphrase) вводить не нужно): Copy ssh-keygen Скопируйте публичный ключ на все управляемые машины. Если сервер использует стандартный порт 22: Copy ssh-copy-id имя_пользователя@имя_управляемого_узла ssh-copy-id имя_пользователя@другой_узел Если на сервере настроен нестандартный SSH-порт (например, порт ''%%2026%%''), используйте флаг ''%%-p%%'': Copy ssh-copy-id -p кастомный_порт имя_пользователя@специальный_сервер При первом подключении система попросит вас подтвердить fingerprint (введите ''%%yes%%'') и запросит пароль от удаленного пользователя. Больше пароль не потребуется. ===== 3. Настройка списка серверов (Inventory) ===== Ansible должен знать, какими машинами он управляет. Откройте файл инвентаризации: Copy vim /etc/ansible/hosts Заполните файл. Секция ''%%[all:vars]%%'' содержит глобальные переменные для всех машин (мы явно указываем путь к Python 3, чтобы избежать системных предупреждений интерпретатора). Далее создаем группы хостов и указываем параметры подключения: Copy [all:vars] ansible_python_interpreter=/usr/bin/python3 [ваша_группа_серверов] # Настоятельно рекомендуется использовать DNS-имена серверов вместо IP-адресов # Синтаксис: имя_узла ansible_user=пользователь ansible_port=порт(если не 22) маршрутизатор_1 ansible_user=admin_пользователь маршрутизатор_2 ansible_user=admin_пользователь клиентский_пк ansible_user=обычный_пользователь сервер_с_кастом_ssh ansible_port=кастомный_порт ansible_user=специальный_пользователь ===== 4. Основная конфигурация Ansible ===== Чтобы Ansible по умолчанию использовал наш файл инвентаризации, его нужно прописать в главном конфигурационном файле: Copy vim /etc/ansible/ansible.cfg Найдите (или создайте) блок ''%%[defaults]%%'' и укажите путь ''%%inventory%%'': Copy [defaults] inventory = /etc/ansible/hosts ===== 5. Проверка связи ===== На управляющем сервере выполните команду пинга всех узлов. Модуль ''%%ping%%'' в Ansible — это не ICMP-пинг, а проверка возможности подключиться по SSH и выполнить скрипт Python. Copy ansible all -m ping В случае успеха вы должны увидеть зеленый вывод со статусом ''%%"ping": "pong"%%'' от каждого узла.