Ansible – x.x.x.x | НЕДОСТУПЕН! => { “changed”: false, “msg”: “Не удалось подключиться к хосту через ssh … }

Вопрос или проблема

Я создал кластер и пытаюсь подключиться к главному узлу с другого сервера Ansible. Я скопировал ssh-ключ на главный сервер и могу подключиться к нему с помощью следующей команды с сервера Ansible:

ssh -i ~/.ssh/id_rsa [email protected]

но я не могу подключиться с помощью

sudo ansible-playbook -i hosts /etc/ansible/playbook/test.yml

И я получил эту ошибку.

x.x.x.x | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host x.x.x.x port 22: Connection timed out\r\n", "unreachable": true }

Можете помочь мне, пожалуйста? Другие проблемы с сервером не помогли мне.

Примечание:

x.x.x.x (это IP главного узла)


PLAY [nodes] ***************************************************************************************************************** TASK [Gathering Facts] *******************************************************************************************************

ok: [t.t.t.t]

fatal: [x.x.x.x]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host x.x.x.x port 22: Connection timed out\r\n", "unreachable": true}

TASK [test] *********************************************************************************

PLAY RECAP *******************************************************************************************************************

x.x.x.x : ok=0 changed=0 unreachable=1 failed=0

t.t.t.t : ok=1 changed=0 unreachable=0 failed=1```

Команда ansible-playbook, вероятно, не удается из-за того, что путь к ssh-ключу не определен.

Ansible рекомендует использовать ssh-agent:

$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa

Другой способ добавить файлы закрытых ключей без использования ssh-agent — это использовать ansible_ssh_private_key_file в инвентарном файле, как объяснено здесь

https://docs.ansible.com/ansible/latest/user_guide/connection_details.html

Маловероятно, но проблема может быть в разрешениях для вашего ключа. Попробуйте следующую команду:

cat ~/.ssh/id_rsa.pub | ssh @ “mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys”

Это всегда помогает мне с ansible.

Прежде всего, вам нужно установить привилегии для частного ключа на вашем сервере ansible:

sudo chmod 600 id_rsa

Проверьте, что вы скопировали открытый ключ на управляемый узел:

sudo chmod 700 id_rsa.pub

Убедитесь, что ваш инвентарный файл правильно настроен с правильным IP-адресом

Проверьте ваш файл sshd_config на управляемом узле, возможно, есть проблемы

Перезапустите ssh сервер как на основном сервере ansible, так и на управляемом узле

Согласно вашему тесту соединения, вы используете ssh ... (предполагается, что ключи настроены правильно), вы запускаете playbook ansible с помощью sudo, это может быть причиной…

Я бы рекомендовал НЕ использовать sudo вообще, так как Ansible этого не требует, и ваш root пользователь может иметь конфигурацию, отличную от вашей, поэтому попробуйте то же самое без sudo, это должно сработать

Ответ или решение

Ошибка, с которой вы столкнулись при попытке подключения к узлу через Ansible, возникает при невозможности установить SSH-соединение с удалённым хостом, в данном случае с "master node". Это связано с тем, что Ansible не может подключиться к указанному IP-адресу. Давайте разберём возможные причины и предложим несколько решений для устранения этой проблемы.

Теория (Theory)

Когда Ansible осуществляет подключение к удалённому узлу, он использует SSH для аутентификации и взаимодействия. Если SSH-клиент работает корректно при ручном подключении, это означает, что ключи и конфигурация SSH настроены правильно. Однако при использовании Ansible возможны некоторые дополнительные настройки, которые должны быть проверены и исправлены:

  1. SSH-ключи. Ansible должен знать, какой приватный ключ использовать для подключения. Это может быть настраиваемо через SSH-агент или прямо в инвентаре Ansible.

  2. Конфигурация SSH сервера на удалённом узле (sshd_config). Возможно, что настройки SSH на удалённом хосте неправильно настроены или SSH-деймон не работает.

  3. Права доступа. Права доступа к SSH-ключам и директориям на локальной и удалённой машинах могут повлиять на возможность подключения.

  4. Сетевые проблемы. Убедитесь, что порты открыты и сеть между машинами функционирует корректно.

Пример (Example)

В вашем случае, вы смогли подключиться через команду SSH из командной строки:

ssh -i ~/.ssh/id_rsa [email protected]

Это говорит о том, что SSH-ключ был правильно скопирован на удалённую машину и конфигурация SSH с вашей стороны корректна для ручного подключения.

Однако при запуске Ansible-playbook:

sudo ansible-playbook -i hosts /etc/ansible/playbook/test.yml

Вы столкнулись с ошибкой подключения:

x.x.x.x | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host x.x.x.x port 22: Connection timed out", "unreachable": true }

Это может указывать на проблему с сетевыми настройками, конфигурацией соединений в Ansible, или правами на доступ к файлам ключей.

Применение (Application)

  1. Проверка SSH-агента:

    • Убедитесь в том, что ваш SSH-ключ добавлен в SSH-агент:
    ssh-agent bash
    ssh-add ~/.ssh/id_rsa

    Это поможет Ansible использовать нужный ключ для подключения.

  2. Использование ansible_ssh_private_key_file:

    • Вы можете явно указать SSH-ключ в вашем инвентаре Ansible, добавив следующее к конфигурации вашего хоста в файле inventory:
    [master]
    x.x.x.x ansible_ssh_private_key_file=~/.ssh/id_rsa
  3. Проверка конфигурации SSH и прав:

    • Убедитесь, что файл sshd_config на удалённом узле правильно настроен. Например, убедитесь, что разрешены нужные алгоритмы шифрования и порты.

    • Проверьте права доступа к SSH-ключам:

    sudo chmod 600 ~/.ssh/id_rsa
    sudo chmod 644 ~/.ssh/id_rsa.pub

    Это предотвратит возможные проблемы с доступом к ключам.

  4. Не используйте sudo:

    • Попробуйте выполнить Ansible playbook без использования sudo, так как это может вызывать проблемы с конфигурацией SSH:
    ansible-playbook -i hosts /etc/ansible/playbook/test.yml
  5. Сетевая проверка:

    • Проверьте наличие открытности порта 22 на вашем маршрутизаторе и наличие связи по этому порту между машинами.
  6. Перезапуск SSH:

    • Перезапустите SSH-демон на обеих машинах для гарантии наличия всех изменений:
    sudo systemctl restart ssh

Следуя этим шагам, вы увеличите шансы на успешное подключение через Ansible и сможете диагностировать и устранить проблему. Если проблема сохраняется, проверьте логи SSH на проблемной машине для получения более подробной информации о возможности отказов подключения.

Оцените материал
Добавить комментарий

Капча загружается...