SSH隧道在云平台交付中的应用

SSH隧道,也称为SSH端口转发(以下统称为端口转发),SSH端口转发是SSH中的一种机制,用于将应用程序端口从客户机连接到服务器机器,反之亦然。它可以用于为传统应用程序添加加密,用于穿透防火墙,还有一些系统管理员和IT专业人员使用它从家用机器打开后门进入内部网络,但是它也可能被黑客和恶意软件滥用。所以,我们在平台交付完成后,会禁用隧道,通过堡垒机对平台进行管理。

SSH端口转发有三种类型:
1.远程端口转发(Remote Port Forwarding)
2.本地端口转发(Local Port Forwarding)
3.动态端口转发(Dynamic Port Forwarding)

在平台交付阶段,这三种端口转发都会用到的,所以直接上图和配置,learning by doing。Xshell作为windows下优秀的终端工具软件,这里仅以此举例,Mac上的SSH Tunnel也是神器。

远程端口转发

这是在平台跳板机上由交付同学配置的,该连接也由交付同学维护。主机是一台有公网地址的机器,比如公司的服务器,地址,端口号,用户名密码有交付同学提供。



最后点击确定并连接,一个远程端口转发就建立了。点击菜单栏查看,选择隧道窗格,点击转发规则,就能看到已经建立的端口转发。

所谓远程端口转发,就是将远程服务器(这里是那台有公网地址的机器)上的端口,和目标服务器(这里是OPS1)上的端口进行绑定。本例中,发往远程服务器34528的数据都会被转发到OPS1的22端口上。

本地端口转发

当一线交付同学配置了远程端口转发后,二线或者其他产品同学想访问平台,则需要在自己的电脑上配置本地端口转发。同样还是Xshell。新建立一个Xshell连接到远程服务器183.131.xxx.xxx,前面的建立连接和输入用户名密码的步骤还是和上面一样,不一样的地方是隧道的设置。

注意:上面的目标主机填的内容就是localhost,就是指远程服务器本身。
这样就建立了你自己的个人电脑到远程服务器的本地端口转发。
所谓本地端口转发,就是将本地(你自己的机器)的端口,和目标服务器(远程服务器)上的一个端口进行绑定。本例中,发往本地5555的数据都会被转发到远程服务器的34528端口。

这样就形成了一个桥式转发,发往本地localhost:5555的数据,会被发送到远程服务器183.171.xxx.xxx:34528,接着又会被转发到OPS1的地址172.24.xx.xxx:22。现在可以试试看,在自己的终端上输入ssh root@localhost 5555,然后输入OPS1的账号和密码。

动态端口转发

我们肯定不满足仅能通过终端去访问平台的OPS1,我们更想用我们自己的浏览器就可以打开部署界面来进行操作,而不是共用一个teamview。上面我们说了,可以直接通过ssh连接到OPS1了,这次新建一个Xshell连接就叫OPS1,连接主机地址和端口为localhost:5555,步骤同上。不一样的地方还是隧道的设置。

这样就设置了一个动态端口转发,我们看到后面有SOCKS4/5,这说明这个端口提供SOCKS代理服务,SOCKS代理只是简单的传递数据包,而不必关心是何种应用协议。这样所有发往localhost:8989的数据都会透明传输到OPS1,由OPS1再次发送。

现在我们的需求是要让浏览器发出的所有请求,都发送到localhost:8989,也就是说,浏览器也需要一个代理服务器。这里推荐使用firefox,简单易用,兼容chrome,这里推荐安装SwitchyOmega插件,这个是用来管理代理设置的插件。

新建一个OPS1的情景,设置好代理协议,代理服务器和代理端口(即动态端口转发设置的),点击应用选项即可。浏览器右上角的⭕️可以随时切换多个代理。

此时,你的浏览器就是访问部署平台了,直接输入部署界面url试试看。

动态端口和本地端口转发都是将本地端口绑定到远程服务器,不同的是本地端口转发只能是一一对应的进行绑定,即本地5555只能绑定远程34528或者其他某一个端口。而动态端口转发则没有这个限制,就像是给本地端口配置成了一个代理服务器一样。到此,三种端口转发在内网云平台交付中的应用就介绍完毕。

常见问题

如果端口连接失败,录远程服务器,执行 lsof -i:34528。找到占用端口的进程,kill -9 $pid。再执行lsof -i:34528 直到没有进程占用该端口,再次进行远程隧道连接即可。

0%