SSH本地转发,远程转发和动态端口转发的区别

SSH本地转发,远程转发和动态端口转发的区别

-L 本地转发(LocalForward)

场景:在本地机器和中间机器之间建立一条通信隧道,将本地机器某个端口的流量通过这条隧道转发到远程机器的端口。使用的场景是,本地机器不能访问远程机器,但中间机器可以访问远程机器,并且本地机器可以ssh登录到中间机器。

本地转发的相关参数:

-L [bind_address:]port:host:hostport
-L [bind_address:]port:remote_socket
-L local_socket:host:hostport
-L local_socket:remote_socket

例子:

ssh -L HostA:PortA:HostC:PortC root@HostB

本地机器为HostA,本地机器可能有多个网卡,所以要绑定本地机器的ip和port。访问本地机器HostA:PortA的流量,会通过中间机器转发到远程机器HostC:PortC上。在这里,需要ssh登录到HostB。

  • 映射远程数据库 dbhost:3306 到本地 localhost:3306

远程数据库服务器dbhost需要通过跳板机登录,跳板机jumphost只能通过私钥ssh登录.如果要在本地访问远程数据库,可以将dbhost:3306映射到localhost:3306,然后就可以通过 localhost:3306 直接访问数据库。

ssh -i xxxx.pem usr@jumphost -L :3306:dbhost:3306 -fN
-i 指定私钥文件
-f 后台运行
-N 不执行远程命令,只做端口转发

如果跳板机也需要代理服务器才能登录,那么我们可以使用 ssh ProxyCommand 设置访问跳板机的代理服务器,假设代理服务器地址为127.0.0.1:1086。

ssh config的配置如下:

Host jumphost
  HostName xx.xx.xx.xx
  User xxxx
  IdentityFile ~/.ssh/xxx.pem
  ProxyCommand=nc -X 5 -x 127.0.0.1:1086 %h %p

相关的配置

GatewayPorts
       Specifies whether remote hosts are allowed to connect to local forwarded ports.  By default, ssh(1) binds local port forwardings to the loopback address.  This prevents other remote hosts from connecting to forwarded
       ports.  GatewayPorts can be used to specify that ssh should bind local port forwardings to the wildcard address, thus allowing remote hosts to connect to forwarded ports.  The argument must be “yes” or “no”.  The
       default is “no”.

-R 远程代理(RemoteForward)

场景:在本地机器和远程机器之间建立一条通信隧道,远程机器某个端口的流量会通过通信隧道转发到本地机器能访问到的机器上。使用的场景是,两个远程机器不能相互访问,但本地机器可以访问这两个远程机器。

远程代理的相关参数:

-R [bind_address:]port:host:hostport
-R [bind_address:]port:local_socket
-R remote_socket:host:hostport
-R remote_socket:local_socket
-R [bind_address:]port

例子:

ssh -R HostB:PortB:HostD:PortD root@HostB

本地机器为HostA,在本地机器通过ssh登录远程机器HostB,建立一条通信隧道,访问远程机器HostB:PortB的流量会通过HostA转发到HostD:PortD

-D 动态端口转发

场景:在本地机器和远程机器之间建立一条通信隧道,本地机器特定端口的流量会通过远程机器转发出去。动态端口转发并没有指定目的地,而正向代理的目的地在建立ssh通道时就确定。

动态端口转发的相关参数:

-D [bind_address:]port

例子:

ssh -D HostA:PortA root@HostB

本地机器为HostA,在本地机器上ssh登录到HostB,建立通信隧道。本地机器的HostA:PortA成为代理端口,流量通过HostB转发出去,流量到达目的机器后,目的机器看到流量的源地址为HostB。

总结

  • 本地机器不能访问远程机器,中间机器可以访问远程机器,本地机器可以ssh登录到中间机器,这种情况下可以使用本地转发。

  • 两个远程机器不能相互访问,但本地机器可以访问这两个远程机器,这个情况用远程转发。

  • 本地机器可以ssh登录到远程机器,如果想让远程机器变成SOCK4和SOCK5代理服务器,这种情况可以使用动态端口转发。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值