Gitlab Webhooks не работает из-за разрешения сценария оболочки - PullRequest
0 голосов
/ 28 января 2019

Использование Laravel 5.6.Я пытаюсь настроить webhook на gitlab, чтобы сделать git pull для событий push.Я создал пост-маршрут, добавил контроллер и метод, который запускает сценарий оболочки:

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;
            });
        }
    }

Сам сценарий оболочки содержит только одну строку:

#!/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.

Он пытается сделать git pull, используя пользователя www-data (я проверил с whoami), поэтому у него нетПравильный ключ SSH, как я могу переключиться на свое ИМЯ ПОЛЬЗОВАТЕЛЯ?

1 Ответ

0 голосов
/ 28 января 2019

SSH-ключи связаны с пользователями, и ваш процесс внутри вашего приложения Laravel, скорее всего, не запускается как пользователь, к которому вы добавили свой ssh-ключ.Вероятно, он запускается как пользователь www-data.

Попробуйте создать ключ ssh для своего пользователя www-data и использовать этот ключ как "Ключ развертывания" на Gitlab.Попробуйте sudo -u www-data ssh-keygen -t rsa создать ключ ssh.Также проверьте этот вопрос.

Чтобы ответить на последний вопрос о переходе на ваше имя пользователя: это не будет хорошей идеей.Таким образом, ваше приложение может запускать все, что сможет запустить ваш пользователь, что не очень хорошая идея.Скорее создайте отдельный ключ ssh для этого пользователя и предоставьте ему ограниченный доступ к вашему хранилищу (т. Е. Только доступ для чтения / извлечения).

...