为了开发游戏服务器,我希望将git push
当前的稳定版转为私人 VPS。在 git-hook 内部receive
应该发生以下情况
sudo systemctl stop myserver
dotnet publish --configuration release
sudo systemctl start myserver
在 myserver.service 内,编译的二进制文件以有权访问 git-repository 的用户身份运行。
我现在的想法是用 root 拥有且每个人都可读的脚本替换第一行和最后一行,这样 git-hookreceive
就会变成
sudo stop-server.sh
dotnet publish --configuration release
sudo start-server.sh
作为最后一步,我希望允许用户权限 sudo 调用这两个脚本,但仅此而已。此外,由于无法进行交互,因此在没有 sudo 的情况下执行脚本时会询问用户密码。
答案1
您可以将以下内容附加到/etc/sudoers
(或在其中创建一个新文件/etc/sudoers.d/
):
<username> ALL=(ALL) NOPASSWD: /path/to/script
这将使用户运行sudo /path/to/script
时<username>
无需密码。请注意,如果恶意用户可以修改脚本的内容,那么它是不安全的,并且您最好尝试完全避免需要 root 权限。