如何通过一个中间服务器进行 Git clone

背景

公司 Github 私有仓库满了,就想到自己搭建一个 Gitlab 服务来托管一些小项目。由于 Docker 的流行,使得搭建 Gitlab 服务这种事变的非常简单,只需要一行 Docker 命令就可以了,本来这事到这就结束了,但是由于公司只有一台主服务器能从外部访问,另外的一台从服务器是通过主服务器才能访问。而 Gitlab 这个服务需要暴露一个 ssh 端口,让用户可以 git clone 。恰巧我把 Gitlab 部署到从服务器了,从服务器并没有对外的端口开放,就有了标题这个问题。

方案

解决方案就是在 ~/.ssh/config 文件中加入以下配置

1
2
3
4
5
6
Host gitlab.company.com
HostName 192.168.100.2
Port 2222
User www
ForwardAgent yes
ProxyCommand ssh -A www@company.com -W %h:%p

company.com 是主服务器的域名
www 是能够使用你本地公钥登陆到主服务器的用户
gitlab.company.com 是 Gitlab ssh 的域名,需要与 Gitlab 中设置的域名一致。是否有解析都无所谓
192.168.100.2 是从服务器在内网的地址
2222 是 Gitlab ssh 的端口,我是使用 Docker 安装的,设置到 2222 了
ForwardAgent yes 是设置使用你本地公钥登陆后续的从服务器
最后一行是设置先登录到主服务器,再登陆到从服务器,从而实现通过中间服务器登陆内网服务器的过程。

1
2
# 搞定
git clone git@gitlab.company.com:group/repo.git