【问题标题】:Gitlab webhooks not working due to shell script permission由于 shell 脚本权限,Gitlab webhook 无法正常工作
【发布时间】:2019-06-21 21:24:01
【问题描述】:

使用 laravel 5.6。我正在尝试在 gitlab 上设置一个 webhook,以便在推送事件上创建一个 git pull。我创建了一个 post 路由,添加了控制器和方法,它启动了一个 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 用户创建git pull(我与 whoami 核对过),所以它没有正确的 ssh 密钥,我该如何切换到我的 USERNAME?

【问题讨论】:

    标签: php git laravel gitlab webhooks


    【解决方案1】:

    SSH 密钥与用户相关联,您的 Laravel 应用程序中的进程很可能不会以您添加 ssh 密钥的用户身份运行。它可能以www-data 用户身份运行。

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

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

    【讨论】:

    • 所以最好为 www-data 用户生成 ssh 密钥?
    • 是的,当然。然后将该 ssh 密钥作为“部署密钥”而不是普通访问密钥添加到您的配置文件中。
    • 它不允许我创建 .ssh 文件夹 - 无法创建目录 '/var/www/.ssh':权限被拒绝
    【解决方案2】:

    最近有人来这里,这里是指南:

    • 脚本由用户 www-data 在 Laravel Process 执行时运行。因此,您首先需要确保为用户 www-data 创建 ssh 密钥并将其添加到您的 gitlab 帐户中。

    为 www-data 创建 ssh 密钥。请按照以下步骤操作:

    1. sudo mkdir /var/www/.ssh(以 root 用户身份创建目录)
    2. sudo chown -R www-data /var/www/.ssh(使 www-data 用户可以读/写 .ssh 目录)
    3. sudo -u www-data ssh-keygen -t rsa(创建 rsa 密钥) 现在,只需按 Enter。不要为密钥添加任何密码。 接下来,您只需要复制公钥并将其添加到 gitlab 帐户即可。

    快乐的自动化!

    【讨论】:

      猜你喜欢
      • 2017-07-17
      • 1970-01-01
      • 2020-06-24
      • 1970-01-01
      • 2013-07-10
      • 2020-11-18
      • 2019-02-28
      • 2021-11-14
      • 1970-01-01
      相关资源
      最近更新 更多