由于Shell脚本权限,Gitlab Webhooks无法正常运行

时间:2019-01-28 19:58:33

标签: php git laravel gitlab webhooks

使用laravel 5.6。我正在尝试在gitlab上建立一个Webhook,以在推送事件上创建一个git pull。我创建了一个发布路线,添加了控制器和方法,该命令启动了一个shell脚本:

use Symfony\Component\Process\Process;

    class WebhookController extends Controller
    {
        public function handle(Request $request) {
            $root_path = base_path();
            $process = Process::fromShellCommandline('cd ' . $root_path . '; ./deploy.sh');
            $process->run(function($type, $buffer) {
                echo $buffer;
            });
        }
    }

Shell脚本本身仅包含一行:

#!/bin/sh

git pull

但是在gitlab的请求详细信息中,推送后我看到一个错误:

error: cannot open .git/FETCH_HEAD: Permission denied

我已经chmod 777 deploy.sh,但是我想它试图从其他用户启动该脚本?如果我从用户启动脚本,它就可以正常工作(我使用的是不带密码的ssh键)。

更新

我做了sudo chown -R $USER:www-data .-现在,除以下一项外,它没有显示权限错误:

Could not create directory '/var/www/.ssh'.
Host key verification failed.
fatal: Could not read from remote repository.

它正在尝试使用www-data用户(我与whoami进行了检查)制作一个git pull,因此它没有正确的ssh密钥,我该如何切换到我的USERNAME?

1 个答案:

答案 0 :(得分:0)

SSH密钥已链接到用户,并且您的Laravel应用程序中的进程很可能不会像添加了ssh密钥的用户那样运行。它可能以www-data用户的身份运行。

尝试为您的www-data用户创建ssh密钥,并将该密钥用作Gitlab上的"Deploy key"。尝试使用sudo -u www-data ssh-keygen -t rsa创建ssh密钥。还要查看this问题。

要回答您有关切换到用户名的最后一个问题:那不是一个好主意。这样,您的应用程序就可以运行用户可以运行的任何东西,这不是一个好主意。而是为该用户创建一个单独的ssh密钥,并为其授予对您的存储库的受限访问权限(即,仅读/拉访问权限)。