Вопрос или проблема
Я получаю странное сообщение с Ansible.
На сервере RHEL 9 я могу присоединиться к нашему домену через командную строку shell
realm join example.xyz --user=svc-ansible --computer-ou="OU=Linux Servers, OU=Servers, OU=ACME, OU=Units, DC=example, DC=xyz"
После этого я могу успешно сменить пользователя с помощью su - [email protected]
, где “johndoe” – это пользователь, определенный в AD и принадлежащий группе AD, определенной в simple_allow_groups
в файле /etc/sssd/sssd.conf
. Таким образом, конфигурация, похоже, работает.
После этого я запускаю realm leave example.xyz --remove -U 'svc-ansible'
и realm list
заранее, чтобы проверить, что сервер больше не находится в домене.
Однако, когда я запускаю через AWX playbook Ansible, определенный следующим образом
(...)
- name: Установить staging_ou
ansible.builtin.set_fact:
staging_ou: "OU=Linux Servers, OU=Servers, OU=ACME, OU=Units, DC=example, DC=xyz"
- name: Присоединение к домену
ansible.builtin.expect:
command: /bin/bash -c 'realm join {{ domain }} --user={{ ad_join_user }} --computer-ou="{{ staging_ou }}"'
responses:
Password.*: "{{ ad_join_password }}"
timeout: 120
(...)
Я получаю следующую ошибку:
TASK [playbook_ad_join : Присоединение к домену] **********************************
fatal: [myrhel9server]: FAILED! => {“changed”: true, “cmd”: “/bin/bash -c ‘realm join example.xyz –user=svc-ansible –computer-ou=\”OU=Linux Servers, OU=Servers, OU=ACME, OU=Units, DC=example, DC=xyz\”‘”, “delta”: “0:00:00.152467”, “end”: “2024-11-13 11:45:09.577079”, “msg”: “ноль не возвращаемый код”, “rc”: 1, “start”: “2024-11-13 11:45:09.424612”, “stdout”: “realm: Уже присоединен к этому домену\r\nПожалуйста, проверьте\r\n https://red.ht/support_rhel_ad \r\ndля получения помощи по общим вопросам.”, “stdout_lines”: [“realm: Уже присоединен к этому домену”, “Пожалуйста, проверьте”, ” https://red.ht/support_rhel_ad “, “для получения помощи по общим вопросам.”]}
Команда realm list
подтверждает, что сервер действительно в домене example.xyz и возвращает тот же вывод, что и когда я запускал команду realm join ...
через shell. Однако я больше не могу su
для пользователей AD: попытка сделать это возвращает ошибку
su: пользователь [email protected] не существует или запись пользователя не содержит все необходимые поля
Ссылка, указанная в сообщении об ошибке, не помогает.
Что может быть не так?
EDIT 1: Запуск через shell той же команды, которая была выполнена через ansible, т.е.
/bin/bash -c 'realm join example.xyz (...) '
ничего не меняет относительно запуска realm join example.xyz (...)
(см. начало поста).
Другие задачи в playbook лишь модифицируют несколько конфигурационных файлов:
/etc/krb5.conf
/etc/sssd/sssd.conf
/usr/local/bin/sss_ssh_authorizedkeys_ad
/etc/ssh/sshd_config
и устанавливают некоторые пакеты. Это не имеет значения, так как конфигурация уже сошлась. Я удалил строку, которая перезапускала демон realmd
, поскольку она могла быть причиной проблемы, но ничего не изменилось.
Ответ или решение
Ваша ситуация с ошибкой "Already joined to this domain" при выполнении команды realm join
через Ansible, в то время как команда работает в оболочке, имеет несколько возможных объяснений. Давайте разберем это подробнее, опираясь на предоставленную вами информацию и контекст.
Проблема
При запуске команды через Ansible вы сталкиваетесь с ошибкой, указывающей на то, что сервер уже является частью домена. Состояние доменной принадлежности подтверждается командой realm list
, которая показывает, что сервер действительно подключён к вашему домену example.xyz
. Однако после использования Ansible вы не можете выполнить команду su
для перехода к пользователям Active Directory, получая ошибку, что пользователь не существует или не содержит всех необходимых полей.
Потенциальные причины ошибки
-
Проблемы с контекстом выполнения: Когда вы выполняете команду через Ansible, она может выполняться под различными учетными данными или в другом окружении по сравнению с вашей оболочкой. Это может приводить к тому, что Ansible не видит текущую сессию или права доступа.
-
Кэширование SSSD: Если в результате выполнения предыдущей команды
realm join
возникли проблемы, кэшированные данные SSSD могут мешать выполнению текущих операций. Убедитесь, что вы очистили кэш с помощью команды:sss_cache -E
-
Параметры входа пользователей: Убедитесь, что необходимые пользователи и группы правильно настроены в конфигурации
/etc/sssd/sssd.conf
, особенно в параметреsimple_allow_groups
. Возможно, пользователи, к которым вы пытаетесь перейти, не входят в указанные группы после выполнения Ansible-playbook. -
Проблемы с доступом к OU: Убедитесь, что у пользователя
svc-ansible
есть все необходимые разрешения для добавления компьютера в указанную организационную единицу (OU). Ошибки могут быть связаны с привилегиями учетной записи.
Возможные решения
-
Отлаживайте предоставляемые переменные: Убедитесь, что переменные
{{ domain }}
,{{ ad_join_user }}
и{{ ad_join_password }}
устанавливаются корректно и передаются в команде Ansible. Вы можете добавить временную задачу в playbook, чтобы вывести эти переменные на консоль. -
Очистите кэш SSSD перед повторным подключением:
- name: Очистка кэша SSSD command: sss_cache -E
-
Проверьте наличия и конфигурацию соответствующих строк в
sssd.conf
: Убедитесь, что ваши изменения в файлеsssd.conf
правильно отражают назначенные группы и поля. -
Идентификация ошибок: Добавьте вывод отладки в Ansible playbook, чтобы вы могли понять, что происходит при выполнении команды:
- name: Прикрепить к отладочным данным debug: msg: "Попытка присоединения к{{ domain }} как {{ ad_join_user }}"
-
Попробуйте перезапустить службы: После обновления конфигурации
sssd.conf
попробуйте перезапустить службу SSSD, чтобы убедиться, что новые настройки вступили в силу:- name: Перезапустить SSSD service: name: sssd state: restarted
Заключение
Сочетание правильной настройки Ansible, разрешений учетной записи и кэширования SSSD может решить вашу проблему с realm join
. Следуйте перечисленным шагам, и это поможет вам в обнаружении и устранении проблемы. Не забудьте также устанавливать регулярные проверки конфигурации, чтобы предотвратить подобные инциденты в будущем.