SSH-ключи и подключение

Тема дорожной карты · Ansible

SSH-ключи являются стандартным механизмом аутентификации, который Ansible использует для подключения к управляемым хостам. Этот метод обеспечивает безопасное подключение без использования паролей, что делает его особенно ценным для автоматизированных систем управления конфигурациями. Публичные ключи создаются с помощью команды ssh-keygen -t ed25519 -C "ansible", а затем добавляются в файл ~/.ssh/authorized_keys на каждом управляемом хосте. Это делается с помощью команд ssh-copy-id или модуля ansible.posix.authorized_key. Ansible определяет, какой приватный ключ использовать, через переменную инвентаря ansible_ssh_private_key_file или флаг --private-key для ansible-playbook. В контексте CI/CD-конвейеров приватный ключ хранится как защищённый секрет конвейера и записывается во временный файл во время выполнения. Это обеспечивает сохранение учётных данных вне исходного кода и минимизирует необходимые разрешения для ключа (режим 0600).

Как это работает

SSH-ключи и подключение на control-node осуществляются через установку Ansible с помощью команд pip install ansible (рекомендуется для получения свежего кода) или apt install ansible/dnf install ansible (для использования дистрибутивных пакетов). Конфигурация Ansible может быть настроена в файле ansible.cfg (на уровне проекта), ~/.ansible.cfg или /etc/ansible/ansible.cfg. Ключевые параметры включают inventory, roles_path, collections_path, host_key_checking, pipelining, gathering. Соединение требует наличия Python на таргете (любая современная версия), доступа по протоколу SSH и возможности выполнения команд с правами sudo при необходимости эскалации прав.

Когда применять

SSH-ключи и подключение следует применять в проектах, где Ansible используется для управления конфигурациями. Для каждого проекта рекомендуется использовать virtualenv с командой python -m venv .venv && pip install ansible для пиннинга версии Ansible, что критично для воспроизводимости результатов. Параметр pipelining = true может быть использован для повышения скорости выполнения, но он требует отключения опции requiretty в файле sudoers. Параметр host_key_checking = false разрешен только в доверенных средах, иначе следует использовать коллекцию ansible.utils для нормального управления ключами. В контексте CI/CD-конвейеров команду ansible-playbook --syntax-check следует использовать для проверки синтаксиса перед выполнением.

Типичные ошибки

Типичные ошибки при использовании SSH-ключей и подключения включают отставание дистрибутивного Ansible от коллекций (TypeError, module-not-found — решение: использование pip в venv), использование host_key_checking = false повсюду (повышает риск MITM-атак), коллизию pip и системного Python (решение: всегда использовать venv), отсутствие ssh_args для jumphost (приводит к прерыванию соединения).

Связанные понятия

Полезные ресурсы