【问题标题】:Running git pull from a php script从 php 脚本运行 git pull
【发布时间】:2012-03-11 08:59:40
【问题描述】:

我正在尝试Perfect Workflow, with Git, GitHub, and SSH,除了从 php 运行命令 git pull 之外,我已经完成了所有设置。

当我运行exec('git pull') 时,我得到:

无法创建目录“/.ssh”。主机密钥验证失败。 致命:远端意外挂断

如果我在终端(以 root 身份)运行它,它工作得很好,但我需要这个钩子从 Post-Receive URL (Github) 工作。

如果我这样做exec('whoami'),我会得到apache

这是来自 mediatemple 和 CentOS 的 (dv)。

【问题讨论】:

  • 您需要使 git 存储库的用户与运行 Web 应用程序的用户相同。
  • apache 用户的主目录设置为什么? ssh 正在获取机器的根目录作为主目录,它不能作为apache 用户在那里写入。 (root 显然可以,这就是它起作用的原因)
  • 感谢大家的回复。本:我该怎么做?布赖恩:我不知道。我不是系统/管理员。我在 CentOS 的 mediatemple (dv) 上运行
  • @AFRC 看看我的回答,我提供了一些细节。希望这足以让您滚动。

标签: php linux git permissions ssh


【解决方案1】:

如果您希望 apache(用户)能够从 git 中提取,您必须为 apache 创建一个 ssh 密钥,然后将其添加到 github 上的只读密钥中。

流程是这样的(根据您的需要调整)

usermod -s /bin/bash apache
su apache
cd ~
ssh-keygen # work through the keygen dance (added a dash)

~/.ssh/id_rsa.pub 上传(这里的波浪号指 apache 的 homedir)到 github 并让 apache 访问它需要从中提取的任何存储库。

然后你可以通过再次su'ing 到 apache 并运行 git pull

在服务器上进行测试
su apache
cd ~/working-copy
git clone my-project

一旦运行成功,您应该能够通过 PHP 运行 git pull

【讨论】:

  • 您好,快换档。谢谢。当我运行命令chmod apache -s /bin/bash 时,我得到: chmod: cannot access `apache': No such file or directory 。抱歉,但我对这个服务器管理员/unix 的东西真的很陌生。
  • 哎呀,应该是chmod -s /bin/bash apache。它将 apache 用户的 shell 设置为 bash,以便您可以 su 到 apache 并测试 git 操作,然后再继续通过 PHP 运行它们;我会在我的答案中更改它。
  • 仍然得到 chmod: 无法访问 `apache': 没有这样的文件或目录
  • 亲爱的上帝;我需要停止在深夜发帖!
猜你喜欢
  • 2012-05-28
  • 1970-01-01
  • 2014-08-16
  • 2018-09-05
  • 1970-01-01
  • 2016-01-07
  • 1970-01-01
  • 2014-03-02
  • 2017-11-04
相关资源
最近更新 更多