允许Apache执行git pull

4
还没有能够弄清楚这个问题...我看到了一些答案,但都没有帮助。
我正在尝试使用Github Webhooks让Github命中我的服务器上的一个URL,并在命中时立即让服务器拉取新提交的项目。我有一个包含以下内容的php脚本:
<?php `git pull git@github.com:my-user/myrepo.git`; ?>

然而,当脚本以用户apache身份运行时,我尝试了以下操作:
chown -R apache:apache .

"并且它仍然显示“权限被拒绝”的错误。所以我尝试编辑sudoers文件并更改以下内容:"
Host_Alias      LOCAL=127.0.0.1
apache          LOCAL=NOPASSWD: /var/www/html/git-hook.php

而且这仍然不起作用。
如何实现这一点?如果我运行:
 sudo php git-hook.php

它的工作正常,所以PHP文件中的代码没有问题。我只是想让它自动化。
有什么想法吗?
编辑:
我还忘了提到。我甚至创建了一个文件夹/home/apache/.ssh,并复制了用于git pull的公钥,但结果相同。

产生相同的结果。不确定我是否理解了您评论的最后一部分:“它的git sudo正在运行(通过PHP),而不是git-hook.php”。 - Peter
我是指不要以root身份运行php来运行git,而是以apache身份运行php来以root身份运行git(因此您需要在sudoers中编辑“/var/www/html/git-hook.php”行)。有没有任何能在apache错误日志中提供更多信息的内容? - didster
难道不应该是 apache LOCAL=NOPASSWD: /usr/bin/git - 允许 apache 用户通过 sudo 运行的命令吗? - didster
相同的结果:sudo: sorry,您必须拥有tty才能运行sudo。 - Peter
ALL = NOPASSWD: ALL 已生效。 - Peter
显示剩余9条评论
3个回答

3

将您的PHP更改为通过sudo运行git

<?php `sudo git pull git@github.com:my-user/myrepo.git`; ?>

然后更改您的sudoers文件以允许apache用户运行git。
apache ALL = NOPASSWD: /usr/bin/git

如果git pull命令必须以apache用户身份运行,那么它将如何授权?因为只有在您从相应的用户执行操作时,ssh auth才能正常工作。 - SenG

1

对于我所需的功能来说,这似乎有点过头了。我只需要能够执行一个简单的git pull命令,并且只在Github通过webhook触发服务器时才需要执行。 - Peter

0

我为开发站点做了这个 - 虽然我不建议在生产站点上使用,但我想不出有什么特别危险的地方,只要脚本不带参数..

我创建了一个 PHP 脚本来执行 git pull。在 Web 浏览器中,我导航到该脚本,设计师等推送的任何更改都会自动部署。 http://.../gitpullscript/gitpullscript.php

这是通过创建一个 Apache 用户拥有的 git checkout 来实现的。您可以通过在文档根目录之外的某个位置创建一个目录,该目录属于 Apache 用户(在本例中为 www-data)来完成此操作。然后将其克隆到该目录中,以便所有文件都属于 www-data。然后将我想要的目录软链接到我的文档根目录中,以便可以在 Web 浏览器中访问它们。

www-data 不在 git 组中,并且存储库设置为每个人都可以读取(但不能写入).. 因此,www-data 可以拉取但不能推送

在项目层次结构中,我创建了一个目录来保存 gitpull 脚本.. 我使用 .htaccess 来保护此目录。 <?php exec('cd /var/www-data/projects/myrepo; git pull');

创建目录/var/www-data 以超级用户的身份更改所有者为www-data-www-data 切换为www-data用户 创建目录/var/www-data/projects 进入目录/var/www-data/projects 克隆我的仓库git clone my-repo


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接