1

我有一个在 PHP 中运行以下 shell_exec cmd 的脚本。

echo shell_exec('cd /var/www/Library/Laravel/ ; git pull bitbucket master ; 2>&1');

这是由 webhook 服务调用的,我想要做的只是减少每次推送时都必须拉入这个开发环境。

但是,调用此路由时,我没有收到任何输出错误或任何内容。谁能建议这可能是为什么?

我从error_log中得到了这个回声->

error: cannot open .git/FETCH_HEAD: Permission denied

我将 apache 用户添加到 git,现在我收到以下错误

Could not create directory '/var/www/.ssh'.
Host key verification failed.
fatal: The remote end hung up unexpectedly
4

1 回答 1

0

我在这里看到一些问题:

1) 您的执行行 "...; git pull bitbucket master ; 2>&1" 应该是 "... git pull bitbucket master 2>&1" - 多余的分号可能会阻止您看到标准错误输出。

2)你发现了所有权问题,所以......

3) 我猜你有一个基于“ssh”的 git URL。第一次以用户身份运行 SSH 时,它将尝试验证主机密钥(另一端的 SSH id)。如果工具不是交互式的并且您尚未接受密钥,则 SSH 的默认行为是失败。或者,如果您接受了密钥,您会看到相同的行为,但它已经改变了。你会以不同的方式解决这两个不同的问题。

解决此问题的“正确”方法是手动运行命令(作为具有适当 HOME 变量集的用户)并手动接受密钥,以便后续命令将“正常工作”。

另一种可能性是覆盖 SSH 的默认行为 - 请参阅“StrictHostKeyChecking”SSH 选项的文档。您可以做一些黑客行为以在命令行上传递它或创建一个 ~/.ssh/config 文件来指定选项。(注意:我推荐第一个解决方案,而不是这个解决方案,除非您了解安全隐患。)

最后,我怀疑您还需要设置您的 SSH 私钥以允许您以该用户的身份进行拉取。

于 2013-03-06T18:02:12.600 回答