Вопрос или проблема
Заранее извиняюсь, если это где-то задокументировано или есть на сайте – я не смог найти решение, поэтому спрашиваю здесь.
Я пытаюсь использовать модуль 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 реализуется следующим образом:
- Локальный узел (или узел, указанный в
delegate_to
) инициирует процесс rsync. - При использовании
mode: pull
, инициатива перемещения файлов идет со стороны цели (в вашем случае это NAS), которая "подтягивает" файлы с удаленного сервера (Server.A).
Основные настройки пользователей, которые вы можете модифицировать в Ansible для решения задачи:
remote_user
: Определяет пользователя, под которым Ansible будет подключаться к удаленным узлам.delegate_to
: Позволяет выполнять задачи на других узлах, отличных от целевого узла плейбука.become
иbecome_user
: Позволяют выполнять команды от имени другого пользователя.
Пример решения
С учетом вашего сценария и проблемы, с которой вы столкнулись, вам необходимо указать правильные учетные данные для подключения к каждому из серверов (NAS и Server.A). Решение может выглядеть следующим образом:
-
Определение пользователей в инвентори-файле. Убедитесь, что для каждого сервера определен соответствующий пользователь:
[NAS] nas.example.com ansible_user=admin [ServerA] server.a.example.com ansible_user=userA
-
Корректировка плейбука для использования правильного пользователя для 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 без использования неверного пользователя.