单刀直入,如果公司选择公有云作为开发/生产环境,我们的代码库譬如 gitlab, 往往会部署到内网的某台 node 上,同时,我们又想在本地自己的笔记本上进行开发,大致架构如下图所示。
由于只有跳板机绑定了公网,其他的机器都在跳板机后面的子网内,需要跳板机进行转发。显然,我们本地的开发机需经由跳板机才能 access 内网(跳板机后面)的 gitlab server。那么我们可以对本地的 git 以及 ssh 进行一些配置,使本地无缝的 push/pull 内网的 repo。
首先假设跳板机的公网 IP 为 10.1.2.3
, gitlab server 的内网 IP 为 192.168.3.1
, 本地使用 ubuntu
OS.
配置 ssh config ~/.ssh/config
这是我的 ssh config
部分内容,将 HostName, User, IdentityFile 相应的替换成你自己的。
~ » cat .ssh/config
Host dataman-route
HostName 10.1.2.3
User wtzhou
IdentityFile ~/.ssh/id_dataman_rsa
Host 192.168.*.*
User wtzhou
IdentityFile ~/.ssh/id_dataman_rsa
ProxyCommand nc -x localhost:10000 %h %p
其中,
gitlab server
(Host 192.168.*.*
) 来说,就是你的 gitlab 账户。这里我在跳板机和 gitlab 上使用了相同的账户: wtzhou
。Host
所用私钥的 PATH
. 以我的配置文件为例, 我为 Host: dataman-route
设置 ssh
免密码登录, ~/.ssh/id_dataman_rsa
就是访问 10.1.2.3
所用私钥的地址; 同时我在 gitlab server
上为账户 wtzhou
添加了相同的公钥,所以 Host 192.168.*.*
(gitlab server) 的 IdentityFile
也是 ~/.ssh/id_dataman_rsa
.打开本地 ssh tunnel
ssh -f -ND 10000 dataman-route
这条 shell 命令将 localhost
的 10000 端口映射到了主机 dataman-route
, 即 IP 为 10.1.2.3
的跳板机。
现在就可以 git clone
我们内网 gitlab 上的 repo 了, 譬如clone项目glance
git clone git@192.168.3.1:wtzhou/glance.git
其实按上面的步骤配置好了以后,不用登陆跳板机,你也可以自由的登陆任何一台你有权限登陆的内网机器了。 譬如,登陆 192.168.100.6
,
ssh 192.168.100.6
当然,前提是你在 192.168.100.6
上的登录账户也是 wtzhou
.