Ansible Synchronize – выполнение задачи с другим удаленным пользователем

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

Заранее извиняюсь, если это где-то задокументировано или есть на сайте – я не смог найти решение, поэтому спрашиваю здесь.

Я пытаюсь использовать модуль Ansible synchronize для извлечения файлов с удаленного хоста следующим образом:

- hosts: Server.A
  gather_facts: no
  tasks:
    synchronize:
      mode: pull
      src: "file/to/pull"
      dest: "path/to/destination"
    delegate_to: NAS

То есть, я хочу, чтобы хост NAS подключился по SSH к Server.A и извлек файлы, которые я хочу загрузить.

Проблема в том, что на NAS используется пользователь по умолчанию (admin).

Я настроил пользователя admin на NAS через файл инвентаризации, и я могу нормально общаться с NAS.

Однако, когда я запускаю задачу synchronize, он пытается войти на источник сервер (Server.A) с пользователем admin, которого не существует, и завершается неудачей.

Я пробовал изменить remote_user, become, настройки модуля set_remote_user в плейбуке, файле хостов и host_vars, но у меня не получается это сделать, и я нахожу это очень запутанным.

Как мне выполнить команду synchronize под другим удаленным пользователем вместо локального?

Спасибо!

Из ansible-doc synchronize:

Пользователь и разрешения для src в synchronize это пользователь, выполняющий задачу Ansible на локальном хосте (или remote_user для хоста с delegate_to, когда delegate_to используется).

Пользователь и разрешения для dest в synchronize это remote_user на хосте назначения или become_user, если активно become=yes.

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

Вопрос, который вы подняли, касается использования модуля synchronize в Ansible для выполнения задачи копирования файлов с удаленного сервера, при этом требуя использования различных удаленных пользователей. Вы столкнулись с тем, что при попытке синхронизации файлов с сервера Server.A на сервер NAS, используется неверный пользователь по умолчанию, что приводит к ошибкам подключения.

Теоретическая часть

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

Задача синхронизации в Ansible реализуется следующим образом:

  1. Локальный узел (или узел, указанный в delegate_to) инициирует процесс rsync.
  2. При использовании mode: pull, инициатива перемещения файлов идет со стороны цели (в вашем случае это NAS), которая "подтягивает" файлы с удаленного сервера (Server.A).

Основные настройки пользователей, которые вы можете модифицировать в Ansible для решения задачи:

  • remote_user: Определяет пользователя, под которым Ansible будет подключаться к удаленным узлам.
  • delegate_to: Позволяет выполнять задачи на других узлах, отличных от целевого узла плейбука.
  • become и become_user: Позволяют выполнять команды от имени другого пользователя.

Пример решения

С учетом вашего сценария и проблемы, с которой вы столкнулись, вам необходимо указать правильные учетные данные для подключения к каждому из серверов (NAS и Server.A). Решение может выглядеть следующим образом:

  1. Определение пользователей в инвентори-файле. Убедитесь, что для каждого сервера определен соответствующий пользователь:

    [NAS]
    nas.example.com ansible_user=admin
    
    [ServerA]
    server.a.example.com ansible_user=userA
  2. Корректировка плейбука для использования правильного пользователя для NAS и Server.A при выполнении синхронизации:

    - hosts: NAS
     gather_facts: no
     tasks:
       - name: Pull files from Server.A
         synchronize:
           mode: pull
           src: "file/to/pull"
           dest: "path/to/destination"
           rsync_opts:
             - "--rsh=ssh -l userA"
         delegate_to: localhost

Изменение строки --rsh=ssh -l userA позволяет указать, что при подключении к Server.A следует использовать конкретного пользователя (userA).

Практическое применение

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

  • Убедитесь, что параметр ansible_user для Server.A соответствует пользователю, который имеет необходимые права доступа для чтения файлов, которые вы хотите синхронизировать.
  • На хосте NAS пользователь admin должен иметь возможность выполнять команды SSH без пароля на основе SSH-ключей, чтобы синхронизация проходила без вмешательства.
  • Проверьте корректность настроек SSH, таких как файлы конфигурации ~/.ssh/config, которые могут перекрывать ранее заданные параметры.

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

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

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

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