提问者:小点点

自动将数字拉到服务器:主机密钥验证失败


我有一台带有 gitlab 克隆的服务器。我已经设置了所有内容,并且可以工作,但现在我想自动执行 git 拉取。我已经基于此添加了一个 ssh 密钥:

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

如果我运行命令 git 拉过腻子,它可以工作。

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

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

这会产生以下错误:

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

我已经搜索了解决方案,我发现的大多数问题都是ssh键的问题。不过,当我从root用户运行命令时,它确实有效。我将php文件的所有者更改为root。

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


共2个答案

匿名用户

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

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

匿名用户

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

像这样创建php脚本:

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

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

然后对apache用户进行初始Git拉取,以确保远程设备被添加到用户的< code>known_hosts文件中,如下所示:

< code>sudo -u www git pull