Назад | Перейти на главную страницу

Ansible module_stdout: команда не найдена при использовании sudo на Centos 7

Я подключаюсь к виртуальным и физическим машинам centos 7, используя ansible с пользователем ansible, у которого есть разрешения sudo без пароля для всех ящиков. На большинстве машин это работает, но на одном ящике я получаю такую ​​ошибку:

FAILED! => { "changed": false, "module_stderr": "Shared connection to ... closed.\r\n", "module_stdout": "/var/tmp/sclpbsoCZ: line 8: -H: command not found\r\n", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 127 }

Я установил sudo без пароля, используя совет из этой ссылки: https://code-maven.com/enable-ansible-passwordless-sudo (в основном, отредактируйте / etc / sudoers, чтобы пользователь мог использовать sudo без пароля)

Я думал, что эти машины идентичны, но явно что-то не так.

Добавление -vvv в команду ansible-playbook позволяет мне видеть, что команда, которую он пытается запустить, выглядит так:

'/bin/sh -c '"'"'sudo -H -S -n -u root /bin/sh -c '

Почему эта машина не работает с анзиблем?

Я нашел это, но на первый взгляд это показалось не связанным с анзиблем:

https://unix.stackexchange.com/questions/192809/sudo-i-returns-an-error

Оказывается, у centos есть scl (коллекции программного обеспечения), которые можно включить.

При загрузке у меня был включен devtoolset-7:

https://www.softwarecollections.org/en/scls/rhscl/devtoolset-7/

Это происходит из-за того, что sudo оборачивается сценарием, который, похоже, фактически не обрабатывает все параметры исходного sudo. Похоже, это можно считать ошибкой (или, по крайней мере, плохим поведением) в devtoolset-7.

На данный момент исправление заключалось в удалении записи в /etc/profile.d/, которая включала devtoolset-7.

Он запускал этот код:

source /opt/rh/devtoolset-7/enable

Если бы я подключился к машине по ssh и выполнил оскорбительную команду:

sudo -H -S -n -u root /bin/sh

Это даст мне ту же ошибку:

# sudo -H -S -n -u root /bin/sh /var/tmp/sclKpdWFR: line 8: -H: command not found

И указал мне на проблему, когда я спросил, какое sudo используется ...

# which sudo /opt/rh/devtoolset-7/root/usr/bin/sudo

Какая кроличья нора!