美文网首页
关于PHP使用WebHook的问题 Host key verif

关于PHP使用WebHook的问题 Host key verif

作者: 嗞嗞嗞嘣biubiu | 来源:发表于2018-10-29 16:20 被阅读0次
PHP项目在coding使用WebHook自动部署时,git pull出现了下面的问题
Host key verification failed.  

fatal: Could not read from remote repository.  

Please make sure you have the correct access rights  

and the repository exists. 

一开始在网上查了,基本都是说删除~/.ssh/known_hosts文件,
然而并没有用,因为我删除的并不是执行git pull用户的known_hosts文件


搞了我两天,原来是用户的问题,下面是我的解决方法:

由于对linux不太熟悉,我都快给搞炸了,会linux的应该都是小意思。

1.查看执行git pull命令的用户
//PHP代码
exec("cd ~ && cd - && cd -", $output);//跳到用户目录,再回刚刚的目录,然后跳到用户目录
print_r($output);//输出

//cd -命令是返回刚刚目录并输出
//不要使用who命令,因为并不一定是它执行git pull的
//反正我就是给它搞晕了,看用户目录就可以知道是哪个用户执行的了
//我的who命令是root用户,而cd -命令的用户目录是www用户

输出的信息是:

Array ( [0] => /home/wwwroot/apche/web,
[1]=> /home/www )
//[0]是我自己的项目路径
//[1]是我自己的用户目录,所以执行git pull的是www用户
2.切换到www用户su www

切换成功请跳过这步
如果出现错误,那应该是禁止shell登陆了(如果你是远程连接服务器的话)

//linux命令
vi /etc/passwd
//进入编辑后,找到下面这行,把最后面的改为/bin/bash
例:www:x:1001:1001:,,,:/home/www:/xxx/xxx
www:x:1001:1001:,,,:/home/www:/bin/bash
//然后就可以切换用户su www了
/*
结束后,建议把最后面的改为/usr/bin/git-shell
禁止shell登陆,但是可以执行git命令
*/ 
3.重新添加ssh公钥

剩下的步骤就是创建公钥,然后coding绑定公钥的一些基本步骤了

//linux命令
cd ~
rm -rf .ssh
ssh-keygen -t rsa -C "xxx@xx.com"
//然后就是设置密码了,不设置就一直回车
//上面的命令分别是 1.进入用户目录。2.删除.ssh目录。3.创建公钥

//接着继续
cat .ssh/id_rsa.pub
//会输出你的公钥,复制到coding绑定公钥即可,然后就可以去测试你的了

绑定好之后,到要自动部署的目录

git init
git remote add 别名 项目地址
git pull 别名 分支
//第一次连接会要你输入yes

然后就可以了。


下面的自动部署是我复制别人代码,忘记哪里复制的了。。。
class Git
{
    public function push()
    {
        // 项目仓库文件夹路径
        $dir =  '/home/wwwroot/app';
        
        // Coding新版本的webhook若是设置了token,Coding则对每个请求进行了哈希签名
        // 这个签名会放在请求头 X-Coding-Signature,在服务器端我们需要进行签名解析才能拿到真正数据
        
        // token验证令牌,与Coding webhook上设置的一致,用于与Coding进行身份验证,防止恶意提交代码
        $token = '';
        
        // 从请求头中获取签名
        $signature = $_SERVER['HTTP_X_CODING_SIGNATURE'];
        
        // 接收Coding post传递的参数
        $json_post = file_get_contents('php://input');
        
        // 进行签名解析
        $sha1 = hash_hmac("sha1",$json_post,$token);
        
        $calculate_signature = 'sha1='. $sha1;
        
        // 进行身份验证
        if ($calculate_signature !== $signature) {
            exit(json_encode(['error'=>'error request']));
        }
        
        // shell_exec()即PHP用于执行系统命令的函数
        // cd $dir:进入上面设置的项目仓库文件夹中
        // git checkout -f 撤销本地的修改
        // git pull origin master  从Coding的项目仓库dev分支拉取最新代码,注意origin为远程仓库的别名,要与 git remote add 远程仓库
        // 别名 仓库地址 中的远程仓库别名保持一致
        exec("cd $dir && git checkout -f && git pull news dev 2>&1", $output);
//         exec("cd ~ && cd - && cd -", $output);
        exit(json_encode($output));
    }
}

相关文章

网友评论

      本文标题:关于PHP使用WebHook的问题 Host key verif

      本文链接:https://www.haomeiwen.com/subject/cbpbtqtx.html