如何在另一个用户中运行 shell 脚本而无需输入密码

如何在另一个用户中运行 shell 脚本而无需输入密码

我想在 hudson 中自动执行一项作业,但 hudson 总是使用用户hudson来运行脚本。我想要以另一个用户的身份运行该脚本。

我查看了 ServerFault 的答案,但只找到了一个使用su命令的解决方案,该命令要求我输入目标用户的密码。这对自动脚本不起作用。

有人能帮忙吗?谢谢。

答案1

您可以使用sudo来执行此操作。首先,您需要修改文件/etc/sudoers以添加一条规则,该规则允许用户hudson成为相关脚本的其他用户。假设您有一个user1需要运行的帐户/usr/local/bin/my_script.sh

运行visudo修改sudoers文件,并添加类似这样的内容:

hudson ALL=(user1) NOPASSWD: /usr/local/bin/my_script.sh

然后,使用以下sudo命令从 hudson 运行脚本:

sudo -u user1 /usr/local/bin/my_script.sh

它是非常visudo修改文件时使用这个sudoers命令检查文件是否有错误非常重要,在将文件放到位之前。此外,我建议快速通读一遍,man sudoers以便在将上述内容添加到配置之前清楚地了解其作用。

答案2

评论或其他包含的 suders 文件Defaults requiretty中的条目应该有帮助。/etc/sudoers

至于 perl 错误 - 您可能正在为该用户使用不同的 PERL5LIB 或不同的 perl 二进制文件 - 并且不会在 sudo 中传递(除非您使用 -E 或 env_keep)。请检查您的环境以及可能的权限。

答案3

sudo -u hudson command将以用户 hudson 的身份运行命令。它需要在您的 sudoers 文件中进行设置,您还可以在其中将其配置为不需要密码。

相关内容