使用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?
答案 0 :(得分:0)
SSH密钥已链接到用户,并且您的Laravel应用程序中的进程很可能不会像添加了ssh密钥的用户那样运行。它可能以www-data
用户的身份运行。
尝试为您的www-data
用户创建ssh密钥,并将该密钥用作Gitlab上的"Deploy key"。尝试使用sudo -u www-data ssh-keygen -t rsa
创建ssh密钥。还要查看this问题。
要回答您有关切换到用户名的最后一个问题:那不是一个好主意。这样,您的应用程序就可以运行用户可以运行的任何东西,这不是一个好主意。而是为该用户创建一个单独的ssh密钥,并为其授予对您的存储库的受限访问权限(即,仅读/拉访问权限)。