SSH端口转发的好处:
1. 利用SSH通道天然的加密特性
2. 通过具备访问权限的第三者,突破防火墙对自己的限制,或者隐身
角色定义:
A. 本地服务器,想通过中间服务器B间接访问目标服务器C
B. 中间服务器,类似于代理,A以B的名义去访问C
C. 目标服务器,C看到的都是中间服务器B在访问自己
1. 本地端口转发
命令:
ssh -Nf -L [local_A_address]:local_A_port:target_C_server:target_C_port via_B_server
参数:
-N,不执行命令
-f,后台执行
-L,local本地端口转发
local_A_address:
127.0.0.1 - 默认,只能本机使用这个端口转发
也可以是本机的IP地址,同时其他人可以使用这个IP来使用这个端口转发
via_B_server:中间服务器
应用:
A---能访问------>B-------能访问------>C
A---不能访问----------------------------->C
A---通过本机端口,以B的名义访问-->C
关闭:
直接kill -9 建立的SSH连接,下同
2. 远程端口转发
命令:
ssh -Nf -R [local_A_address]:local_A_port:target_C_server:target_C_port local_A_address
参数:
-R,remote,远程端口转发
local_A_address,这个地址为A的IP
应用:
环境和目的 与 本地端口转发是一样的,这里只是不在本地服务器A上执行命令,而是在中间服务器B上执行;
为什么不直接在服务器A自己身上执行命令呢?这个场景有别于本地端口转发的地方在于A不能主动连接B但反之可以,比如A在外网,B在内网;
而A去访问的时候,同样都是通过自己的IP和端口,同样首先建立AB之间的SSH通道,以服务器B的名义来访问目标服务器C。
3. 动态端口转发
命令:
ssh -Nf -D [local_A_address]:local_A_port via_B_server
参数:
-D,dynamic,动态端口转发
应用:
本地和远程端口转发,都限定了目标服务器以及目标服务器的端口;
而动态端口转发,A把B作为了自己的全权代理,不限定目标服务器及其端口;
这里要求在A上,做下代理设置,比如浏览器的代理设定为自己的IP:PORT;
本地端口转发和远程端口转发,其实都可看着是动态端口转发(代理)的子集;
三者和一般代理的目的和场景都一致,区别在于这里自己A和代理服务器B之前的所有连接都是基于加密的SSH。