Ansible shell 命令在 sudo 下失败,但应该成功

Ansible shell 命令在 sudo 下失败,但应该成功

我有一个基于的 Ansible 任务https://github.com/al3x/sovereign/blob/master/roles/tarsnap/tasks/tarsnap.yml#L2当它应该成功时却不断失败。

我曾经使用 来运行该角色ansible_ssh_user=root,但最近切换到使用具有无密码 sudo 权限的非 root 用户,然后调用become在我的剧本中。

但是,现在即使我指定了,Ansible 任务也会失败become=true。Tarsnap 已安装,但任务仍然返回stderr: /bin/sh: tarsnap: command not found。我认为这是因为sudo我不太明白的一些事情。

当我以非 root 用户身份手动 ssh 进入服务器并运行 时sudo tarsnap --version | grep 1.0.35 --color=never,我得到的是sudo: tarsnap: command not found。但如果我以 root 用户身份 SSH 进入,则同一命令会返回tarsnap 1.0.35。同样,当我运行sudo -i tarsnap --version | grep 1.0.35 --color=never(请注意-我),我明白了tarsnap 1.0.35

我正在使用 CentOS 7。

1)为什么sudovs 的结果不同sudo -i

2)如何修复我的 Ansible 任务?

答案1

使用完全限定路径指向 tarsnap,或明确设置 PATH 以便可以找到 tarsnap。您可以通过以 root 身份登录并执行来找到缺少的路径元素which tarsnap

您没有提到您正在使用什么版本的 Linux,所以请记住 /bin/sh 可能与 /bin/bash 不一样(例如 ~/.bashrc 和 ~/.bash_profile 可能无法读取)。

sudo -i将为您提供一个“交互式”shell。您应该查看 bash 的手册页(如果您确实在使用 bash)以了解“交互式means (ie. which files are consulted). I think you'll find thatsudo -i will read in ~/.bashrc, while justsudo (without-i”不会做什么。

相关内容