文章目录
- 1. 什么是SSH端口转发
- 2. SSH本地端口转发
- 2.1 两台机器的本地端口转发
- 2.2 三台机器的本地端口转发
- 3. SSH的远程端口转发
- 4. 总结
- 5. 参考博客
1. 什么是SSH端口转发
SSH端口转发可以看作是一种代理,只要你的电脑和服务器能够建立SSH连接,那么就可以通过SSH隧道绕开防火墙的限制实现任意两个端口间的数据通信。
2. SSH本地端口转发
在本地电脑(你的笔记本)设置端口转发,使得你本地电脑从固定端口发出的数据都能绕开防火墙经由ssh隧道到达目标服务器,典型例子就是用vscode在远程服务器运行网站,但你在本地也可以通过localhost:8080进行登入。
2.1 两台机器的本地端口转发
- 服务器说明
本地电脑
实验室服务器:root@10.249.181.40
- 任务背景
本地电脑可以通过SSH连接到服务器,本地应用需要访问服务器上的mysql数据库(3306端口),但由于防火墙限制,我们无法直接访问3306端口,此时我们可以通过SSH端口转发,间接性的访问服务器上的mysql数据库。 - 运行命令
在本地电脑运行如下命令
# ssh -L 本地电脑用作代理的端口:远程服务器的IP地址(一般为localhost):远程服务器的端口 远程服务器的用户名@远程服务器的IP地址
ssh -L 7001:localhost:3306 root@10.249.181.40
- 命令解释
上述命令表示在本地电脑和远程服务器间建立一个SSH隧道,将本地的7001端口映射到远程服务器root@10.249.181.40
的3306端口上,之后所有发往本地7001端口的数据都会转发到远程服务器的7001端口。例如,我们可以通过访问mysql -hlocalhost -P7001
访问远程服务器的数据库。
2.2 三台机器的本地端口转发
- 服务器说明
本地电脑
公网服务器A:root@121.233.37.238
内网服务器B:root@10.249.181.40
- 任务背景
本地电脑可以通过SSH连接到公网服务器A,但无法连接到服务器B,而公网服务器A和内网服务器B同属于一个内网,可以相互连接。我们需要访问内网服务器B,此时我们可以通过SSH端口转发,利用公网服务器A间接的访问内网服务器B。 - 运行命令
在本地电脑运行如下命令
# ssh -L 本地电脑用作代理的端口:内网服务器B的IP:内网服务器B的端口 公网服务器A的用户名@公网服务器A的IP地址
ssh -L 7001:10.249.181.40:3306 root@121.233.37.238
- 命令解释
上述命令表示在本地电脑和远程服务器A间建立一个SSH隧道,将本地的7001端口间接性的映射到root@10.249.181.40
的3306端口上,之后所有发往本地7001端口的数据都会转发到远程服务器的7001端口。此时公网服务器A相当于本地电脑和内网服务器B沟通的中转站,典型的例子就是VPN。
3. SSH的远程端口转发
远程端口转发就是反过来,在远程服务器运行ssh端口转发的命令。
- 服务器说明
公网服务器A:root@121.233.37.238
内网服务器B:root@10.249.181.40
- 任务说明
我们在内网服务器B上部署了一个web应用,但这个应用只能在服务器B上面访问,我们无法在本地电脑访问Web服务。由前面的知识可知,一个非常简单的解决方法就是通过之前说的SSH本地端口转发,来利用公网服务器A间接访问B上面的Web应用。但在实际生产当中为了保证安全,内网服务器一般是无法从外部访问的,也就是说服务器B可以访问外网,但外网确不能访问服务器B,此时我们无法运用SSH本地端口转发连接上服务器B。考虑到服务器B是可以通过SSH远程连接到服务器A的,此时我们可以利用SSH的远程端口转发实现SSH本地端口转发类似的效果。 - 运行命令
在内网服务器B运行如下命令
# ssh -R 远程服务器A的端口:本地的IP地址(一般为localhost):本地的端口 远程服务器A的用户名@远程服务器A的IP地址
ssh -R 7001:localhost:8080 root@121.233.37.238
- 命令说明
通过上述命令,公网服务器A和内网服务器B建立了一个双向访问的SSH隧道,此时公网服务器A的7001端口映射到内网服务器B的8080端口,我们可以通过访问121.233.37.238:7001
来间接访问部署在服务器B上面的Web应用。
4. 总结
在本地电脑(你的笔记本)上面就用SSH本地端口转发,在服务器你就用SSH远程端口转发,两个转发的最终结果都是一样的,都是在本地电脑和远程服务器之间建立双向通信的SSH隧道。
5. 参考博客
深入 SSH:解锁本地转发、远程转发和动态转发的潜力
ssh本地端口转发,远程端口转发,隧道(这个解释不饶)
SSH端口转发概述