我有一个带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脚本时我不知道如何解决这个问题。
答案 0 :(得分:2)
虽然名称相似,但此错误与“主机密钥”有关,而不是与用于公钥认证的密钥有关。此错误很可能意味着(远程git服务器的)主机密钥已经更改,因为它存储在known_hosts
文件中。
检查存储在运行php的用户的.ssh/known_hosts
文件中的密钥(httpd?apache?)。要修复错误,请删除与远程git服务器的主机名或IP对应的行。 (从安全角度来看,您应该在接受之前验证新的“主机密钥”。)
答案 1 :(得分:1)
This blog post可能有所帮助,它建议的主要观点是:
像这样创建php脚本:
<?php
...
echo shell_exec("/full/path/to/bin/git pull 2>&1");
...
注意:您可以通过执行which git
然后使用apache用户执行初始Git pull,以确保将远程添加到用户的known_hosts
文件中,如下所示:
sudo -u www git pull