场景描述
- gitlab服务器(ubuntu16.0.4),运行在内网,提供git服务
- 云服务器(centos7),提供端口转发功能,为git服务器提供外网连通环境
遇到的问题
我开始使用了ssh远程端口转发功能,把云服务器的8080端口和2222端口分别转发到了git服务器的80和22端口,这样我就能通过121.40.150.93:8080的方式来访问我的git网页了,但是这里出现了一个问题
没有办法使用ssh协议来克隆仓库
虽然我之前找到了解决方案,可以通过一些配置来克隆仓库,但是这对不熟悉ssh或者新手来说太不友好了,这不是我想要的git服务器。
目标
我的目标只有一个,希望我在本地配置的git服务器,能达到gitlab官方服务器一样的使用感觉。
所以我现在需要解决的一个问题就是,使用云服务器的22端口来访问我的本地服务器,从而提供gitlab原声般的体验。
解决过程
因为我现在需要用到云服务器的22端口,那么云服务器原来的ssh服务器就不能走22端口了,所以接下来的任务,隐藏原服务器的22端口,修改成其他任意端口,我这里就用9468好了
阿里云服务器有安全组规则,所以要先在阿里云开启9468端口,要不然云服务器就无法登录了
修改ssh-server默认端口(云服务器)
vim /etc/ssh/sshd_config
在17行代码左右的配置,把Post修改为9468
Port 9468
重启sshd服务
/bin/systemctl restart sshd.service
使用autossh进行转发22端口(git服务器)
因为22端口是特权端口,只能以root运行,而且云服务器已经修改了ssh服务的端口了,为了建立这条隧道,首先要做的事情是添加一个配置配置
vim ~/.ssh/config
添加下面的内容
Host server
hostname 121.40.150.93
user root
port 9468
接着使用ssh远程端口转发功能,把云服务器22端口转发到本地22端口
ssh -NR 22:localhost:22 server
验证
接下来只要验证就可以了,点击我的git服务器进行体验
体验了一下,非常不错,赞一个👍!有个问题请教一下,http://git.crisen.org/ 这个是直接访问的你云服务器,是做了80端口的转发到git服务器吗?请问你是把所有到80端口的请求都转发出去了还是只是转发了访问git服务的请求,能否简单说说怎么实现的?
这个地方使用了一次nginx的反向代理,我首先使用反向隧道把云服务器的8080端口转发到了本地局域网git服务器的80端口,然后使用nginx把云服务器的80端口代理到了8080端口。
恩,好的,非常感谢!另外你这个评论系统有点不好使,每次我都得填name、email、website,有点麻烦,而且你给我回复了,我也不知道,还得打开你这个网页去看,为啥不换个disqus这样的呢?