自动将git拉入服务器:主机密钥验证失败


Automatic git pull to server: Host key verification failed

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

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

如果我通过putty运行命令git pull,它会起作用。

现在我想创建一个php文件,它可以自动提取git。我是这样做的:

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

这会产生以下错误:

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

我一直在寻找解决方案,发现的大多数问题都是ssh密钥的问题。不过,当我从root用户运行命令时,它确实有效。我将php文件的所有者更改为root。

我对此完全陌生,所以我可能会错过一些显而易见的东西。然而,当我从命令行执行git pull时,它是有效的,而当我调用php脚本时,它就不起作用了,我不知道如何解决这个问题。

虽然名称相似,但此错误与"主机密钥"有关,而不是用于公钥身份验证的密钥。此错误很可能意味着(远程git服务器的)主机密钥在存储在known_hosts文件中后发生了更改。

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

这篇博客文章可能会有所帮助,它建议的要点是:

创建如下php脚本:

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

注意:您可以通过执行which git 找到(Linux)Git安装的路径

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

sudo -u www git pull