← Назад к списку
Железо и софт • 06.06.2026

Ansible выдает ошибку Failed to connect to the host via ssh как исправить сбой publickey

Пытаюсь запустить плейбук автоматизации конфигурации серверов и вызываю команду ansible-playbook -i inventory.ini site.yml на управляющем узле. На этапе сбора фактов процесс намертво прерывается, а в консоли терминала вылетает критическая ошибка: «fatal: [server_ip]: FAILED! => {«msg»: «Failed to connect to the host via ssh: Permission denied (publickey,password)»}». При этом если подключаться к удаленной ноде напрямую через обычный клиент ssh под тем же пользователем, то авторизация и доступ к консоли проходят идеально ровно. Подскажите, из-за каких скрытых конфликтов ключей шифрования ломается автоматический мост связи, как правильно переписать параметры инвентаря и разблокировать выполнение тасков?

Ответы (5)

Артем Скрипт
Здорово! Ошибка "Failed to connect via ssh" при работающем ручном SSH-подключении — это классическая накладка изоляции контекста утилиты. Когда ты пишешь команду `ssh user@ip` вручную, твой терминал автоматически подхватывает интерактивный агент аутентификации `ssh-agent` и считывает дефолтный ключ `id_rsa` из твоей домашней папки. Ansible же работает как неинтерактивный скрипт автоматизации на Питоне. По умолчанию он пытается выполнить рукопожатие без явного указания ключей шифрования, либо использует учетную запись текущего локального пользователя вашей системы (например, root), под которым запущен сам плейбук, из-за чего удаленная нода мгновенно сбрасывает пакеты трафика.
Марина Девопс
Чтобы принудительно связать логику сборщика с конкретными криптографическими ключами вашей операционной системы и восстановить мосты связи с хостами, настройте инвентарь строго по шагам:
1. Перейдите в рабочий каталог вашего проекта автоматизации и откройте файл `inventory.ini` через текстовый редактор nano.
2. Найдите блок описания целевых серверов или конкретную строчку с IP-адресом забаговавшейся ноды.
3. Добавьте к объявлению хоста явные переменные для управления сессией, прописав пользователя: `ansible_user=имя_пользователя` (например, ubuntu или deploy).
4. Рядом через пробел укажите точный абсолютный путь к вашему приватному SSH-ключу на диске: `ansible_ssh_private_key_file=/home/user/.ssh/id_ed25519`.
5. Сохраните изменения в файле инвентаря и заново запустите проверку связи быстрой пинг-командой: `ansible all -m ping -i inventory.ini` — сокеты успешно откроются.
Дмитрий Сис
Ребята, если пути к ключам настроены верно, а ошибка publickey продолжает намертво блокировать плейбук, проверяйте версии OpenSSH на серверах. В современных дистрибутивах Linux на целевых нодах по умолчанию отключают поддержку старых небезопасных алгоритмов хэширования (типа RSA с SHA-1). Если ваш закрытый ключ был сгенерирован давно, библиотека `paramiko` или нативный клиент ssh, вызываемый Ансиблом, не смогут согласовать типы шифрования пакетов во время приветственного рукопожатия, сбрасывая сессию. Перевыпустите ключи по свежему стандарту ED25519.
Никита Облако
Чтобы заставить управляющий узел использовать системные настройки проброса ключей и ускорить создание сетевых мостов во время автоматизации, перепишите глобальные параметры по инструкции:
1. В корневом каталоге вашего проекта создайте или откройте существующий текстовый конфигурационный файл `ansible.cfg`.
2. Пропишите или раскомментируйте блок настроек подключения, добавив заголовок: `[ssh_connection]`.
3. Строкой ниже активируйте флаг пересылки ключей безопасности (SSH Agent Forwarding), прописав: `ssh_args = -o ForwardAgent=yes -o ControlMaster=auto -o ControlPersist=60s`.
4. В блоке `[defaults]` дополнительно отключите строгую проверку подписей хостов, чтобы новые ноды не вешали скрипт: `host_key_checking = False`.
5. Сохраните документ и запустите ваш плейбук. Команды начнут выполняться без лишних проверок и отказов доступа сокетов.
Роман Кодер
Если настроить криптографические ключи прямо сейчас не получается из-за ограничений прав на целевом сервере, вы можете временно перевести плейбук на обычную авторизацию по связке логин-пароль. Для этого установите в систему вспомогательную Linux-утилиту `sshpass` командой `sudo apt install sshpass`. После этого запускайте выполнение вашего сценария автоматизации со специальным флагом интерактивного запроса пароля: `ansible-playbook -i inventory.ini site.yml --ask-pass`. Сборщик сам запросит пароль и пробросит его в сокет.

Ваш ответ