在PHP中使用shell_exec时,Git会“拒绝权限”

时间:2014-09-23 21:34:31

标签: php git

我正在尝试在bitbucket上创建一个钩子,它执行一个php文件,这个文件执行pull命令:

shell_exec('/usr/local/cpanel/3rdparty/bin/git pull');

pull命令在SSH控制台上运行正常,但PHP返回错误:

  

权限被拒绝(publickey)。致命:无法从远程读取   库中。

     

请确保您拥有正确的访问权限和存储库   存在。

命令 - 版本 显示git的路径是正确的, whoiami 会返回相同的用户两者都是,所以我不知道这是否是一个许可问题。

可能出现什么问题?

编辑:另一个问题:我为 git 添加的别名不适用于PHP,只有上面的完整路径。通过终端它工作得很好。也许这就是为什么密钥在php中不起作用的原因。

编辑2: $PATH两者都不同。

1 个答案:

答案 0 :(得分:2)

在PHP脚本中运行此命令时,您没有像自己一样运行命令:

shell_exec('/usr/local/cpanel/3rdparty/bin/git pull');

它从终端控制台工作的原因是您从控制台以自己的身份运行命令。但是在Web服务器上,您不是运行该命令的用户。请记住:当您在Web服务器上运行PHP时,它是一个Apache模块。这意味着Web服务器用户(在某些系统上可能是www-dataroot甚至apache)正在运行PHP脚本,然后运行shell_exec命令。

所以它永远不会像你设置的那样工作。也许你可以将某些东西整合在一起,这样就可以让Web服务器使用密钥对来实现这些目的,但这似乎是一种等待发生的安全风险。