2014-09-23 98 views
1
使用了shell_exec时

我努力让自己在到位桶钩,执行一个PHP文件,并将该文件执行拉出指令:的Git拉拒绝“权限”,在PHP

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

拉命令作品罚款SSH控制台上,但PHP返回错误:

Permission denied (publickey). fatal: Could not read from remote repository.

Please make sure you have the correct access rights and the repository exists.

命令--version显示与git的路径是正确的,whoiami两者都返回相同的用户,所以我不知道它是否是一个权限问题。

会发生什么问题?

编辑:的另一个问题:我添加了混帐没有PHP的工作,只有完整的路径如上别名。通过终端它工作得很好。也许这是为什么键不工作在PHP中的原因。

编辑2:$PATH是两个不同。

+0

听起来像你的SSH密钥没有添加到该git存储库(权限问题)。 – Alex 2014-09-23 21:39:38

+2

你怎么调用这个包含shell_exec()的脚本?通过webrowser/http?在这种情况下,它不应该返回Web服务器的UID,而不是你得到的“同一用户”? – 2014-09-23 21:39:55

+0

公钥在存储库上。我可以从服务器上拉出来,问题只在于从php文件运行命令时。是的,我通过http运行php文件,whoami返回相同的用户名。是否有可能让用户具有相同的名称但具有不同的权限? – 2014-09-23 22:30:40

回答

2

当您在PHP脚本中运行这个命令,你没有运行命令自己:

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

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

所以它永远不会工作,因为你有它设置。也许你可以把一些东西拼凑在一起,这样就可以让Web服务器使用密钥对来达到这些目的,但是这看起来像是等待发生的安全风险。

+0

谢谢。我是一个完整的小白。我明白,用户可能会有所不同,但是当我运行** shell_exec('whoami')**时,它表示用户与从termianl运行时相同。当我列出正在运行的用户时,它只列出这个用户并且说它正在运行apache。这很混乱。正如我上面所说的,** $ PATH **在两个方面都不同,它是否意味着什么? – 2014-09-24 12:18:54

+0

@BrunoMuller **“shell_exec('whoami'),它表示用户与我从终端运行时相同”**当您从终端运行PHP时,您正在运行自己登录终端。 Apache作为模块运行的PHP以另一个用户身份运行。两件完全不同的事情。除非我混淆了:你是否试图从终端运行PHP脚本来执行此操作? – JakeGould 2014-09-24 14:01:27