Я подключаюсь к виртуальным и физическим машинам 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
Какая кроличья нора!