嗯,这阵子入手了一个VPS,然后是各种折腾啊,因为毕竟是在互联网上,高手不知何几,于是感到,小心为上啊。可是不开放端口是不行的……这个怎么办呢?嗯,是个问题,然后,SSH进入了我的眼帘。之前也发过一使用SSH代理,对此进行过研究,不过这个实在是太片面了,完全不能发挥SSH的全部性能。
继续是参考文章:
上班族ssh tunnel求生手冊
这次要研究的是这个“L”开关
这个转发形造成的结果就是,不对公众开放的端口都可以开放在127.0.0.1,然后使用端口转发转过去。
比如说,假设我有一个支持SSH登录的服务器,服务器IP为192.168.77.1,在服务器上启动一个mysql,修改my.cnf,让mysqll只listen在127.0.0.1上,然后使用
ssh -NfL 127.0.0.1:3306:127.0.0.1:3306 192.168.77.1
这样,你就可以使用连接mysql的软件,连接127.0.0.1:3306,就可以直接访问远程的mysql服务器了!(即使你没有Shell权限!!)
稍微解释一下命令的内容
ssh -NfL 127.0.0.1:3000:127.0.0.1:3306 192.168.77.1
N : 什么也不做
f : 在后台运行
L :端口转发
127.0.0.1 :ssh在本地上监听的端口,如果要对公众开放,写0.0.0.0,如果要对某个接口上的人开放,填写该接口的ip
3000 :本地的监听端口
127.0.0.1 :服务器要连接的ip,因为例子使用的是连接服务器上不对外开放的mysql,于是写127.0.0.1
3306 :远程服务器要连接的端口,mysql使用的是3306
192.168.77.1 :远程服务器的ip
其实这也算是一种代理吧,只是用的方式有点特别。
发现这样之后,服务器一下子就变得安全起来,Linux的什么VNC Server啊,windows的remote desktop啊什么的,全部都可以藏在127.0.0.1,不对外开放,端口就剩一个ssh的22,服务器的安全性得到了很大的提高。
然后就是,这样的用法的话,可以使用多重连接,比如A不能直接连到B的情况下,可以找到一个可以连接到B的C,然后再经过类似的叠加而进行绕行连接,意外的方便。不过似乎在实际应用中,连接会有点不稳定。