SSH端口转发

SSH端口转发提供了一种安全增强和网络穿透的方法。它包括动态转发、本地转发和远程转发,用于加密不安全的网络服务数据传输、作为加密跳板绕过防火墙,以及在内网和公网间建立安全通道。动态转发通过SOCKS5协议实现,本地转发和远程转发则分别用于本地和远程计算机的连接。例如,本地转发可以将本地流量通过SSH隧道转发到目标服务器,而远程转发则允许远程服务器访问本地服务。
摘要由CSDN通过智能技术生成

为什么会用到SSH端口转发呢?

假设你有一个远程服务器的后台,但是你又不想让它开放HTTPS连接的端口
(只用SSH连接,除非你的公钥泄漏了不然会比HTTPS连接安全的多)
我们公司的项目就是这种情况,外部的MEC不想开放HTTP连接,这时就用到了SSH连接方式,这样就会将不加密的数据放在SSH安全连接里面传输

简介

SSH端口转发有两个主要作用:

  1. 将不加密的数据放在SSH安全连接里面传输,使得原本不安全的网络服务增加了安全性,比如通过端口转发访问Telnet、FTP等明文服务,数据传输就都会加密
  2. 作为数据通信的加密跳板,绕过网络防火墙
    有三种使用方法:动态转发、本地转发、远程转发

动态转发

动态转发指的是,本机与 SSH 服务器之间创建了一个加密连接,然后本机内部针对某个端口的通信,都通过这个加密连接转发。它的一个使用场景就是,访问所有外部网站,都通过 SSH 转发。

动态转发需要把本地端口绑定到 SSH 服务器。至于 SSH 服务器要去访问哪一个网站,完全是动态的,取决于原始通信,所以叫做动态转发。

$ ssh -D local-port tunnel-host -N

上面命令中,-D表示动态转发,local-port是本地端口,tunnel-host是 SSH 服务器,-N表示这个 SSH 连接只进行端口转发,不登录远程 Shell,不能执行远程命令,只能充当隧道。

  • 举例来说,如果本地端口是2121,那么动态转发的命令就是下面这样。
$ ssh -D 2121 tunnel-host -N

注意,这种转发采用了 SOCKS5 协议。

  • 下面是 SSH 隧道建立后的一个使用实例。
$ curl -x socks5://localhost:2121 http://www.example.com

上面命令中,curl 的-x参数指定代理服务器,即通过 SOCKS5 协议的本地2121端口,访问http://www.example.com

本地转发

本地转发(local forwarding)指的是,SSH 服务器作为中介的跳板机,
建立本地计算机与特定目标网站之间的加密连接。
本地转发是在本地计算机的 SSH 客户端建立的转发规则。

它会指定一个本地端口(local-port),所有发向那个端口的请求,都会转发到 SSH 跳板机(tunnel-host),然后 SSH 跳板机作为中介,将收到的请求发到目标服务器(target-host)的目标端口(target-port)。

$ ssh -L local-port:target-host:target-port tunnel-host

上面命令中,-L参数表示本地转发,local-port是本地端口,target-host是你想要访问的目标服务器,target-port是目标服务器的端口,tunnel-host是 SSH 跳板机。

举例来说,现在有一台 SSH 跳板机tunnel-host,我们想要通过这台机器,在本地2121端口与目标网站www.example.com的80端口之间建立 SSH 隧道,就可以写成下面这样。

$ ssh -L 2121:www.example.com:80 tunnel-host -N

然后,访问本机的2121端口,就是访问www.example.com的80端口。

$ curl http://localhost:2121

# 注意,本地端口转发采用 HTTP 协议,不用转成 SOCKS5 协议。

远程转发

远程转发指的是在远程 SSH 服务器建立的转发规则。
它跟本地转发正好反过来。
建立本地计算机到远程计算机的 SSH 隧道以后,本地转发是通过本地计算机访问远程计算机,
而远程转发则是通过远程计算机访问本地计算机。

它的命令格式如下

$ ssh -R remote-port:target-host:target-port -N remotehost

上面命令中,-R参数表示远程端口转发,remote-port是远程计算机的端口,target-hosttarget-port是目标服务器及其端口,remotehost是远程计算机。

远程转发主要针对内网的情况。下面举个例子。

第一个例子是内网某台服务器localhost80 端口开了一个服务,可以通过远程转发将这个 80 端口,映射到具有公网 IP 地址的my.public.server服务器的 8080 端口,使得访问my.public.server:8080这个地址,就可以访问到那台内网服务器的 80 端口。

$ ssh -R 8080:localhost:80 -N my.public.server

上面命令是在内网localhost服务器上执行,建立从localhost到my.public.server的 SSH 隧道。
运行以后,用户访问my.public.server:8080,就会自动映射到localhost:80

参考

https://wangdoc.com/ssh/port-forwarding.html

https://solitum.net/posts/an-illustrated-guide-to-ssh-tunnels/

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AlbertOS

还会有大爷会打钱?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值