ngrok反向代理内网git仓库

你是否因为无法访问公司内网的git服务器而感到发恼,只要你在公司内部有一台pc电脑,看看这篇文章,问题就能够很快解决…

需要先安装ngrok并编译生成代理服务端和代理客户端程序。具体操作可参考:《ngrok实现内网穿透》

1. 代理服务端(公网)

启动服务端程序

1
$ ~/ngrok/bin/ngrokd -domain="ngrok.qcmoke.site"

2. 代理客户端ngrok配置(内网)

(1)下载编译生成的代理客户端程序后配置ngrok.cfg

1
2
3
4
5
6
7
8
9
$ vim ngrok.cfg
server_addr: "ngrok.qcmoke.site:4443"
trust_host_root_certs: false
#隧道列表
tunnels:
git:
remote_port: 2222
proto:
tcp: gitlab.company.com:2222

(2)启动内网中的代理客户端

1
$ ./ngrok.exe -config ngrok.cfg start git

2. 外网用户端操作(外网)

(1)生成密钥

默认已经有~/.ssh/id_rsa密钥的话,可以生成不同名称的密钥文件。

为什么不用默认的~/.ssh/id_rsa?因为如果github的git注册账号和公司的git注册账号不一样的话,对应的ssh_key也不一样。

1
$ ssh-keygen -t rsa -C "qcmoke@company.com" -f ~/.ssh/id_rsa_company

(2)给ssh用户端添加私钥

1
$ ssh-add ~/.ssh/id_rsa_company

(3)在公司内网服务中加入公钥用户端ssh_key,即~/.ssh/id_rsa_company.pub里的内容。

(4)配置git服务

1
2
3
4
5
6
7
8
9
10
#假设公司内网git域名为gitlab.company.com,而端口是2222(默认是22),git账号为qcmoke
#HostName指向代理服务器
#IdentityFile为生成的私钥文件路径
$ vim ~/.ssh/config
Host gitlab.company.com
HostName ngrok.qcmoke.site
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_company
User qcmoke
Port 2222

(5)添加私钥到用户端的ssh中

1
2
3
4
5
6
#启用ssh代理
$ ssh-agent bash
#列出添加的所有私钥
$ ssh-add -l
#添加私钥
$ ssh-add ~/.ssh/id_rsa_company #ssh清空私钥ssh-add -D

(6)测试和克隆仓库

1
2
$ ssh -T git@gitlab.company.com
$ git clone ssh://git@gitlab.company.com:2222/crcsoft-itsm/itsm-backend.git


----------- 本文结束 -----------




如果你觉得我的文章对你有帮助,你可以打赏我哦~
0%