【发布时间】:2015-11-14 00:24:45
【问题描述】:
操作系统 - Ubuntu 14.04
我正在使用 GIT webhooks 进行部署。
我已将部署密钥添加到 git 存储库,现在我想在本地存储库发生推送时触发 git pull origin master 命令。
这是我通过浏览器调用的test.php 文件:
<?php
//echo "THis is a test file on a test repo for testing the deploy functionality using github webhooks!!!!";
echo exec('whoami');
echo exec('sh -x /var/www/proj/test/git.sh');
?>
这是git.sh shell 文件:
#!/bin/bash
cd /var/www/proj-dir/test
git pull origin master
当我使用php test.php 在终端上运行此程序时,我得到了预期的正确结果:
ubuntu From github.com:repo/test
* branch master -> FETCH_HEAD
Already up-to-date.
ubuntu 用于whoami,后跟git pull 输出。
现在,当我通过浏览器调用相同的http://example.com/test.php 时,问题出现了将用户更改为 www-data 但没有用。
检查了 apache 日志,当我通过浏览器执行时出现权限错误
Please make sure you have the correct access rights and the repository exists. + cd /var/www/proj/deploy-test + git pull origin master
主机密钥验证失败。致命:无法从远程存储库中读取。请确保您具有正确的访问权限并且存储库存在。
我需要进行哪些更新才能使文件通过浏览器请求工作?
如果我需要更新 sudoers 文件,应该更新什么?
更新
我将.ssh 键添加到var/www/ 目录,因为那是apache 用户的家。但我还是得到了
git pull origin master
error: cannot open .git/FETCH_HEAD: Permission denied
我还为 www-data 用户添加了一行,以便能够执行 sh 文件。
www-data ALL=(anthony) NOPASSWD: /var/www/mysite/vendor/tmd/auto-git-pull/scripts/git-pull.sh
参考here还是不行
将 .git 文件夹的权限更新为 www-data 用户
sudo chown www-data:www-data /var/www/proj/test/.git
【问题讨论】:
-
您需要确保请求拉取的是正确的用户。哪些用户具有从 repo 中提取的权限?看来你需要是 ubuntu。
-
是的
ubuntu,但我相信当通过http访问时,www-data的 apache 用户需要具有执行脚本的权限。在浏览了许多帖子后,我了解到我可能需要更新 www-data 的 sudoers 文件以获得正确的权限。如果我的方向错了,请纠正 -
难道你不能只是 chmod 脚本,所以组/其他有执行权。看来您的脚本正在执行中。
-
试过了,我将用户切换到
www-data获取 php 和 shell 文件,但没有成功!由于浏览器上的 whoami 表示用户尝试运行的是 www-data,我得到了 www-data,对吗?否则我可能会有错误的假设 -
@nicoX 我让它工作了,但我不确定所涉及的安全隐患。我不得不将
.git文件夹的权限更改为www-data:www-data。这工作正常,但我尝试在我的 shell 文件中添加sudo ubuntu,但它给了我sudo: no tty present and no askpass program specified。我会要求添加一个带有答案的解决方案,以便我可以给你几点并关闭线程。
标签: php git github apache2 git-pull