我正在尝试在bitbucket上创建一个钩子,它执行一个php文件,这个文件执行pull命令:
shell_exec('/usr/local/cpanel/3rdparty/bin/git pull');
pull命令在SSH控制台上运行正常,但PHP返回错误:
权限被拒绝(publickey)。致命:无法从远程读取 库中。
请确保您拥有正确的访问权限和存储库 存在。
命令 - 版本 显示git的路径是正确的, whoiami 会返回相同的用户两者都是,所以我不知道这是否是一个许可问题。
可能出现什么问题?
编辑:另一个问题:我为 git 添加的别名不适用于PHP,只有上面的完整路径。通过终端它工作得很好。也许这就是为什么密钥在php中不起作用的原因。
编辑2: $PATH
两者都不同。
答案 0 :(得分:2)
在PHP脚本中运行此命令时,您没有像自己一样运行命令:
shell_exec('/usr/local/cpanel/3rdparty/bin/git pull');
它从终端控制台工作的原因是您从控制台以自己的身份运行命令。但是在Web服务器上,您不是运行该命令的用户。请记住:当您在Web服务器上运行PHP时,它是一个Apache模块。这意味着Web服务器用户(在某些系统上可能是www-data
,root
甚至apache
)正在运行PHP脚本,然后运行shell_exec
命令。
所以它永远不会像你设置的那样工作。也许你可以将某些东西整合在一起,这样就可以让Web服务器使用密钥对来实现这些目的,但这似乎是一种等待发生的安全风险。