我有一个带有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>&1");
...
注意:您可以通过执行which git
找到(Linux)Git安装的路径
然后与apache用户进行初始Git拉取,以确保将远程添加到用户的known_hosts
文件中,如下所示:
sudo -u www git pull