Ansible module_stdout:在 Centos 7 上使用 sudo 时未找到命令

Ansible module_stdout:在 Centos 7 上使用 sudo 时未找到命令

我正在使用 ansible 连接到 centos 7 虚拟机和物理机,用户名为 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)

我以为这些机器是完全相同的,但显然有些不对劲。

在 ansible-playbook 命令中添加 -vvv 让我看到它尝试运行的命令是:

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

这台机器为什么不能与 ansible 一起工作?

答案1

我发现了这一点,但乍一看它似乎与 ansible 无关:

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

这是一个兔子洞!

相关内容