我想在 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 文件中进行设置,您还可以在其中将其配置为不需要密码。