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

Automatic git pull to server: Host key verification failed

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

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

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

现在我想创建一个 php 文件来执行自动 git 拉取。我这样做:

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

出现以下错误:

Host key verification failed. fatal: The remote end hung up unexpectedly

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

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

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

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

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

像这样创建 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