【问题标题】:Automatic git pull to server: Host key verification failed自动 git pull 到服务器:主机密钥验证失败
【发布时间】:2015-06-13 20:48:20
【问题描述】:

我有一个带有 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 脚本并且我不知道如何解决这个问题时。

【问题讨论】:

    标签: php linux git github ssh


    【解决方案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 拉取,以确保将远程添加到用户的 known_hosts 文件中,如下所示:

    sudo -u www git pull

    【讨论】:

    • 如果我在我的目录之后放置空间,我会得到:“sh: full/path/to/bin/ : is a directory” 如果我没有得到这个:“ sh: /full /path/to/bin/git: 没有这样的文件或目录"
    • 我对你的评论感到困惑 - 你真的在使用“/full/path/to/bin/git”吗?
    • 不,我把 full/path/to/bin/ 改成了绝对路径
    • 如果我在那里执行 sudo 命令,我得到:“sudo: unknown user: www”
    • 我用 apache 所有者更改了 www,它现在可以工作了。非常感谢。
    【解决方案2】:

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

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

    【讨论】:

    • 如果我使用 exec('whoami') 我会得到一个自定义用户的名称,我将其设置为文件所有者以获得 ftp 访问权限。我如何找到该用户的 known_hosts?
    • 通常您可以在/etc/passwd 中查找该用户。但是,我猜这是在共享的虚拟主机上,所以你不能这样做。相反,您可以检查 HOME 环境变量 (exec('echo $HOME'))。
    • 这是一个vps,我有完全访问权限。
    猜你喜欢
    • 2014-01-31
    • 2018-05-15
    • 2016-10-24
    • 1970-01-01
    • 2016-01-21
    • 2016-02-02
    • 1970-01-01
    • 2012-11-05
    • 2016-11-27
    相关资源
    最近更新 更多