команда ansible rsync завершается неудачей при использовании некерберосного ssh на удаленной системе

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

Я хочу синхронизировать структуру каталогов с одного удаленного сервера на другой, используя playbook.yml Ansible. Во время выполнения команды rsync через модуль shell Ansible возникает ошибка. Я знаю причину – используется исполняемый файл ssh по умолчанию от поставщика в качестве основы команды rsync. Необходимо использовать версию ssh с поддержкой kerberos, которая также находится на удаленной системе. Если я вручную войду на remoteA и выполню ту же команду rsync, указанную в сценарии absible (с использованием -e /path/to/Kerberos/ssh), все работает нормально. Но, похоже, Ansible не учитывает флаг -e для указания, какой ssh использовать, и, следовательно, возникает ошибка аутентификации Kerberos.

Существует ли способ заставить его использовать правильную версию ssh с исполняемым файлом rsync? Именно это и сообщало -e /desired/version/of/ssh, но снова же, по какой-то причине ansible, похоже, не может это использовать.

  - name:  "rsync base_directory remoteA  ==> remoteB"
    shell:
      cmd: 'rsync -av -e /path/to/kerberos/version/ssh  base_directory [email protected]:/path/to/desired/location/'
      chdir: '/path/to/remtoteA/parentDir/for/base_directory'

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

Решение проблемы с использованием команды rsync через Ansible с поддержкой Kerberos SSH

Введение

В данной статье мы рассмотрим проблему, с которой столкнулись при использовании Ansible для копирования директорий с помощью команды rsync, когда возникает необходимость использовать Kerberos-авторизованный SSH. Проблема заключается в том, что Ansible не использует указанный вами SSH-адаптер, что в свою очередь приводит к ошибкам аутентификации Kerberos.

Суть проблемы

Вы сообщаете, что команда rsync не выполняется должным образом из-за использования SSH-бинари по умолчанию, вместо версии, которая поддерживает Kerberos. В то время как при ручном выполнении команды с использованием флага -e, указывающего конкретный SSH, все работает корректно, Ansible игнорирует этот флаг.

Причины возникновения проблемы

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

Решение

Чтобы решить данную проблему, вы можете использовать несколько подходов:

1. Настройка ansible_ssh_executable

Параметр ansible_ssh_executable позволяет указать, какую версию SSH использовать Ansible. Добавьте следующий код в ваш playbook или инвентарный файл:

- hosts: remoteA
  vars:
    ansible_ssh_executable: /path/to/kerberos/version/ssh
  tasks:
    - name: "rsync base_directory remoteA ==> remoteB"
      shell: 'rsync -av -e /path/to/kerberos/version/ssh base_directory [email protected]:/path/to/desired/location/'
      args:
        chdir: '/path/to/remoteA/parentDir/for/base_directory'

2. Использование модуля rsync Ansible

Ansible предоставляет специализированный модуль ansible.posix.synchronize, который идет в комплекте с функциональностью rsync и может использовать настроенный SSH по умолчанию. Используйте его вместо shell:

- hosts: remoteA
  vars:
    ansible_ssh_executable: /path/to/kerberos/version/ssh
  tasks:
    - name: "Synchronize base_directory from remoteA to remoteB"
      ansible.posix.synchronize:
        mode: push
        src: base_directory
        dest: [email protected]:/path/to/desired/location/

Этот способ более предпочтителен, потому что он использует внутренние механизмы Ansible для управления ssh-соединениями и может работать более стабильно.

3. Проверка конфигурации SSH

Убедитесь, что ваш SSH-клиент (в данном случае Kerberos-версия) правильно настроен. Возможно, вам потребуется внести изменения в файл конфигурации (~/.ssh/config), чтобы убедиться, что для конкретного хоста будет использоваться нужный SSH:

Host remoteA
    HostName remoteA.com
    User your_user
    IdentityFile /path/to/identity
    ForwardAgent yes
    Port 22
    PreferredAuthentications gssapi-with-mic

Заключение

Теперь вы знаете, как настроить Ansible для использования Kerberos-версии SSH при запуске команды rsync. Важно помнить, что использование специализированных модулей, таких как synchronize, может значительно упростить процесс автоматизации. Я надеюсь, что данные рекомендации помогут вам эффективно решать аналогичные задачи в будущем.

Если у вас возникнут дополнительные вопросы, пожалуйста, не стесняйтесь обращаться за помощью.

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

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