自动git pull到服务器:主机密钥验证失败

时间:2015-04-08 18:19:08

标签: php linux git github ssh

我有一个带gitlab克隆的服务器。我已经设置了所有内容,但它确实有效,但现在我想自动执行git pull。我已基于此添加了一个ssh密钥:

https://help.github.com/articles/generating-ssh-keys/

如果我通过putty运行命令git pull,它就可以。

现在我想创建一个自动git pull的php文件。我这样做:

<?php
echo shell_exec( 'git pull 2>&1' );
?>

这会产生以下错误:

  

主机密钥验证失败。致命:远程端意外挂断

我已经搜索了一个解决方案,我发现的大部分内容都是ssh密钥的问题。当我从root用户运行命令时,它确实有效。我将我的php文件的所有者更改为root。

我对此完全陌生,所以我可能会错过一些明显的东西。但是,当我从命令行执行git pull时它正在工作,而不是在我调用php脚本时我不知道如何解决这个问题。

2 个答案:

答案 0 :(得分:2)

虽然名称相似,但此错误与“主机密钥”有关,而不是与用于公钥认证的密钥有关。此错误很可能意味着(远程git服务器的)主机密钥已经更改,因为它存储在known_hosts文件中。

检查存储在运行php的用户的.ssh/known_hosts文件中的密钥(httpd?apache?)。要修复错误,请删除与远程git服务器的主机名或IP对应的行。 (从安全角度来看,您应该在接受之前验证新的“主机密钥”。)

答案 1 :(得分:1)

This blog post可能有所帮助,它建议的主要观点是:

像这样创建php脚本:

<?php
...
   echo shell_exec("/full/path/to/bin/git pull 2&gt;&amp;1");
...

注意:您可以通过执行which git

找到(Linux)Git安装的路径

然后使用apache用户执行初始Git pull,以确保将远程添加到用户的known_hosts文件中,如下所示:

sudo -u www git pull