本文学习的内容来自与B站UP主DavyCloud的《【秒懂】5分钟学会SSH端口转发,远程工作用得着 | 如何充分利用云服务器》和知乎Fundebug的《玩转SSH端口转发》
今天博主学习了一波sftp的搭建教程后,对SSH这一个工具的使用产生了略微的兴趣。SSH,全称为Secure Shell——安全外壳协议。是相对于telenet更为可靠和安全的一个远程登录会话协议。本来一开始我以为这只是一个纯纯的远程登录协议,但是经过sftp的学习,我知道了它竟然还能作为一个文件传输的工具。之前博主曾经碰到过国内服务器没法git clone项目的问题,当时也是靠SSH到我香港的VPS作为跳板来进行下载解决的问题。在经过今晚的学习以及了解后,我才发现我使用到的应该就是SSH端口转发这一功能。
今晚的学习中,主要有两种使用场景我感觉是我可能在未来中使用到的,分别是本地端口转发和远程端口转发
SSH端口转发也被称作SSH隧道(SSH Tunnel),因为它们都是通过SSH登陆之后,在SSH客户端与SSH服务端之间建立了一个隧道,从而进行通信。SSH隧道是非常安全的,因为SSH是通过加密传输数据的(SSH全称为Secure Shell)。
1.本地端口转发

本地端口的使用场景一般为,假设我在我腾讯云的服务器上边的3000端口搭建了某个web服务,但是我不想让这个3000端口被我的防火墙放开并在公网上暴露出来,我边可以通过我的用户机主机A(192.168.1.2) SSH远程连接到我的云服务器上,让云服务器直接在内部就帮我访问3000端口。
其实感觉换句话说,就有点像使用SSH的端口做了一个端口映射,假设我SSH的端口是默认的22,那么就有点类似于将22端口映射到了服务器的3000端口上。
命令语法:ssh -L [本地IP]:本地port:目的IP:目标port User@server
本地IP在这里是我们的用户机本身,所以这里我们可以缺省不填,或者填入localhost。
本地port是我们用户机本身进行连接所开放的port,这里我们可以填一个我们的用户机开放的端口,这里我们填入8888
这里的目的地址就是远端服务器本身的IP地址,由于我们进行端口转发的前提本身是建立ssh连接,所以我们的目的地址其实就可以填localhost就行。
而目标port,就是我服务器上搭建服务的监听的地址,也就是3000端口,所以这里我的命令语法可以为:
ssh -L localhost:8888:localhost:3000 root@119.29.95.246
此时,我们就可以通过直接在浏览器中输入http://localhost:8888来访问我云服务器上端口为3000的服务了。相当于我本机上的8888端口和云服务器上的3000端口之间就已经建立了一个隧道。
如果我本地的局域网中有一台主机B(192.168.1.3),他与主机A之间能够互相通信,那么主机B也能通过主机A来访问我云服务器上的服务,输入http://192.168.1.2:8888就可以进行访问。
2.远程端口转发

远程端口的一般服务场景为,假设我在自己家里搭建了一个web服务,我想我人在外边的时候也能够访问这个服务,但由于我家里没有公网IP,并且我又不想开DDNS和内网穿透,那咋整?
这时候SSH的远程端口转发就很有用了,我可以让我家里的本地服务器,远程连接到我的云服务器,让它们两个之间建立一个转发隧道,然后我在外边就可以连接我的云服务器,让云服务器来转发我的数据,达成我访问内网服务器的目的。说实话就有点科学上网的那个感觉,就是一个代理转发。
命令语法:ssh -R [云服务ip]:云服务器port:搭建服务的机子的ip:搭建服务的port user@server
例如,我云服务器的ip为119.29.95.246,我想要开放的端口为8888,然后我搭建服务的机子就是和云服务ssh的机子,所以ip可以设置为localhost,然后本地服务的端口为3000,则我的命令可以写成:
ssh -R [119.29.95.246]:8888:localhost:3000 root@119.29.95.246 #[]内的内容为缺省内容
而如果我想让内网中的另外一台机子B(192.168.2.2)上搭建的服务能够被外网访问,我们也可以用主机A来搭桥,建立一个云服务器到主机B之间的隧道,命令为:
ssh -R [119.29.95.246]:8888:192.168.2.2:3000 root@119.29.95.246
这样,所有访问我云服务器8888端口的服务,都会被转发到我的内网服务器的3000端口上。
虽然我感觉好像有点脱裤子放屁的样子,毕竟我都有云服务器了,那我的服务还搭在内网干啥呢。。不过这次主要还是了解学习了SSH的其他妙用,说不定以后就有用上的可能了!先记录一哈!
Comments NOTHING