SSH端口转发

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端口的数据都会转发到内网服务器B的3306端口。此时公网服务器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. vscode登入内网服务器

公网服务器A,内网服务器B,如果你想以公网服务器A作为跳板登入内网服务器B,你可以使用SSH proxyjump
你可以配置ssh_config如下

Host 内网服务器B
  HostName 服务器B的IP地址
  User root
  ProxyJump 公网服务器A

6. 参考博客

深入 SSH:解锁本地转发、远程转发和动态转发的潜力
ssh本地端口转发,远程端口转发,隧道(这个解释不饶)
SSH端口转发概述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值