ssh端口转发是什么?有什么用?

目录
  • 前言
  • 1. 本地端口转发
  • 2. 远程端口转发
  • 3. 动态端口转发(SOCKS5)
  • 4. 本地端口转发 和 动态端口转发有啥区别
  • 5. 多级端口转发
  • 6. 总结

前言

一开始我对 ssh 端口转发这个名词概念很模糊,听起来也很晦涩难懂,不知道它的作用到底是什么,有什么用处,于是便开始查找相关资料、理解、运用,后来发现其实也没那么复杂,理解和用起来异常简单。

首先,ssh 端口转发可分为:本地端口转发、远程端口转发、动态端口转发
下面我会单独给每种端口转发类型进行讲解。

1. 本地端口转发

首先在本地主机运行:

格式
ssh -L local-port:target-host:target-port tunnel-host -N
案例
ssh -L 8080:wwww.example.com:80 root@wwww.example.com

-L 是本地端口转发的标识符
local-port 本地端口号
target-host 目标主机
target-port 目标端口号
tunnel-host 作为转发的服务器
-N 表示只作为转发,不登录进入服务器

此时本地访问 locahost:8080 就相当于远程访问 www.example:com:80

应用场景:

假如远程主机在 9888 端口部署了一个服务器,但是防火墙并没有开放这个端口,
如果本地想要访问这个 9888 ,就可以用上面的案例来绕过防火墙进行 ssh 访问。假如远程主机是国外的,你也可以绑定远程主机的 80 / 443 的来进行科学访问。

2. 远程端口转发

首先在本地主机运行:

格式
ssh -R remote-port:target-host:target-port tunnel-host -N
案例
ssh -R 8888:localhost:8080 root@wwww.example.com -N

-R 是远程端口转发的标识符
remote-port 远程端口号
target-host 目标主机
target-port 目标端口号
tunnel-host 作为转发的服务器
-N 表示只作为转发,不登录进入服务器
此时远程访问 www.example:com:8888 就相当于本地访问 locahost:8080

应用场景:
假如本地主机在 9888 端口部署了一个服务器,如果远程主机想要访问本地的 9888,就可以用上面的案例

3. 动态端口转发(SOCKS5)

格式
ssh -D local-port tunnel-host -N
案例
ssh -D 7999 root@wwww.example.com -N

-D 是本地端口转发的标识符
local-port 本地端口号
tunnel-host 作为转发的服务器
-N 表示只作为转发,不登录进入服务器

注意,这种转发采用了 SOCKS5 协议,不能像本地/远程端口转发那样来直接访问
我们得将 http 请求转成 SOCKS5 才能转发出去,下面是请求使用案例

curl -x socks5://localhost:7999 https://www.baidu.com
curl -x socks5://localhost:7999 https://www.weibo.com

此时本地访问 socks5://localhost:7999 https://www.baidu.com 等同于让远程服务器www.example.com 去访问 https://www.baidu.com / https://www.weibo.com
你也可以通过浏览器设置 socks5 代理绑定 7999,此时浏览任何网站都会走向这个代理,然后再由这个代理询问远程机请求再把请求结果返回到 socks5 代理然后在返回到浏览器。

应用场景:

假如你的服务器是国外的,那么此时本地访问国外链接就相当于是科学访问。支持代理 qq 数据、使无网主机变成有网。

4. 本地端口转发 和 动态端口转发有啥区别

本地端口在一开始就明确了远程机端口号,而动态端口转发对应远程机端口是未知的,
你也可以理解动态端口实际上就是请求什么样的类型,就自动给我们绑定对应的端口,它们的区别如下:
本地端口 L:8080 => R:80
动态端口 L:8080 ⇒ R:N

动态端口转发的作用是很强大的,它不仅可以处理 http,还可以自动适配其它协议并进行绑定对应端口。

比如有一台没有网络的电脑想要上 qq,用过 qq 的都知道有个代理设置,所以我们就可以通过动态端口转发方式实现有网,

你可以在里面设置 socks 类型并写上代理地址及端口号,这样 qq 产生的数据就会通过对应的 111.222.333:1080 转发出去

从而实现本地机没网但可以借助111.222.333:1080 来帮我转发数据变成有网。

再比如下面这种情况也是一样通过代理方式让没网的主机变成有网。

5. 多级端口转发

你可以在本地启动多个端口转发,比如我们有本地机 A 和两个远程机 B,C
此时你想通过本地机 A 访问 B 来间接访问 C, 即 A -> B > C
那么就可以用借助多级转发来实现,我们来看案例:

本地机搭建第一个 ssh 隧道

ssh -L 7000:localhost:3000 root@www.example.com -N

远程机 www.example.com 自己搭建第二个 ssh 隧道,可以理解为监听自己。

ssh -L 3000:localhost:8000 root@www.example.com -N

结果就是
L:7000 --> R:3000
R:3000 --> R:8000
因此 L:7000 就可以间接访问到 R:8000

6. 总结

本地端口转发:本地请求 === 远程请求远程端口转发:远程请求 === 本地请求动态端口转发:本地访问外部所有请求 === 远程代替访问外部所有请求

以上端口转发类型可以混合使用,不限于同一种类型,想要转发玩的6得靠实践应用才行。

到此这篇关于ssh端口转发是什么?有什么用?的文章就介绍到这了,更多相关ssh端口转发内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SSH远程登录和端口转发详解

    介绍 SSH 是创建在应用层和传输层基础上的安全协议,为计算机上的 Shell(壳层)提供安全的传输和使用环境. SSH 只是协议,有多种实现方式,本文基于其开源实现 OpenSSH 远程登录 SSH主要用于远程登录: $ ssh user@host 当本地用户名和远程用户名一致时,可省略用户名: $ ssh host SSH 协议默认端口是22,指定端口可使用 -p 参数 $ ssh -p 2222 user@host MITM SSH 采用公钥加密的方式来保证传输安全.过程如下: 客户端发起

  • SSH端口转发实现内网穿透的实现

    我们局域网的机器能够访问外网,但是外网不能访问内网.因为内网访问互联网时候能确定外网的地址,外网却不能确定我们局域网内的具体地址.(ip地址有限)如果 我们在访问外网的时候,这个链接让他保持.不断,那么这个链接就相当于我们建了一条路,内网数据能出去,外网数据能进来,ssh也是这个方法. 使用ssh命令链接公网服务器 1.首先在外网服务器上编辑sshd的配置文件 vim /etc/ssh/sshd_config #将GatewayPorts 开关打开 GatewayPorts yes 重启sshd

  • linux ssh端口转发的三种方式

    ssh是我使用最频繁的两个命令行工具之一(另一个则必须是vim).有了ssh,我可以远程处理各种可能出现的问题而无需肉身到现场. 这几天teamviewer被黑的事情影响挺大,于是由远程控制想到了内网穿透,自然而然的想到了ssh的端口转发也能实现内网穿透.再细想一下,发现ssh隧道.或者说端口转发,竟然实现了正向代理.反向代理和内网穿透三种常用的网络功能,更佩服其功能的强大和使用中的便利. ssh有三种端口转发模式,本文一一对其做简要介绍. 本地转发 本地端口转发(Local Port Forw

  • SSH端口转发,本地端口转发,远程端口转发,动态端口转发详解

    第一部分 SSH端口转发概述 当你在咖啡馆享受免费 WiFi 的时候,有没有想到可能有人正在窃取你的密码及隐私信息?当你发现实验室的防火墙阻止了你的网络应用端口,是不是有苦难言?来看看 SSH 的端口转发功能能给我们带来什么好处吧! SSH端口转发概述 让我们先来了解一下端口转发的概念吧.我们知道,SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据.但是,SSH 还同时提供了一个非常有用的功能,这就是端口转发. 它能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自

  • ssh端口转发是什么?有什么用?

    目录 前言 1. 本地端口转发 2. 远程端口转发 3. 动态端口转发(SOCKS5) 4. 本地端口转发 和 动态端口转发有啥区别 5. 多级端口转发 6. 总结 前言 一开始我对 ssh 端口转发这个名词概念很模糊,听起来也很晦涩难懂,不知道它的作用到底是什么,有什么用处,于是便开始查找相关资料.理解.运用,后来发现其实也没那么复杂,理解和用起来异常简单. 首先,ssh 端口转发可分为:本地端口转发.远程端口转发.动态端口转发 下面我会单独给每种端口转发类型进行讲解. 1. 本地端口转发 首

  • VSCode远程代码开发及DNS隧道端口转发实现远程办公代码

    VSCode远程代码开发 我的开发环境 服务端: 系统CentOS,位于学校办公室中,为两台Dell的T7920中塔服务器,只需安装好ssh服务,并开启,开发环境安装好gcc,如果需要并行,需要安装好openmpi.Ubuntu也可以,我以前也在Ubuntu上开过. 客户端: 系统Windows,win7,win10皆可,在家中使用笔记本办公.需安装VSCode,版本不限. IDE: VSCode,只需安装在客户端,此外,需要安装对应开发模块,我的是C++,需要安装对应的C++拓展模块: 此外需

  • 在CentOS 7 上为docker配置端口转发以兼容firewall的解决方法

    在CentOS 7上当我们以类似下列命令将主机端口与容器端口映射时可能遇到无法访问容器服务的问题 docker run --name web_a -p 192.168.1.250:803:80 -d web_a:beta1.0.0 . 由于docker在执行此命令时,是向iptables注入了一条规则将主机803映射到容器80端口,但是CentOS 7中以firewalld服务替代了iptables.因此,上述命令的端口映射不会生效. 解决方法:首先观察一下主机上的网卡信息,确认增加了一个doc

  • Windows自带的端口转发工具netsh使用方法

    下面的代码在windows下运行后可以讲172.20.53.1的14941端口转发到172.20.53.2的3389端口上 复制代码 代码如下: netsh interface ipv6 install netsh interface portproxy add v4tov4 listenaddress=172.20.53.1 listenport=14941 connectaddress=172.20.53.2 connectport=3389 如果要取消上面的端口转发,使用下面的代码 复制代

  • Mac中使用Nginx实现80端口转发8080端口

    由于项目本身的原因,开发必须使用80端口实现,而在Unix内核中非Root用户无法直接使用1024以下的端口,最初作者找到了pfctl的方式实现80端口转发到8080端口实现访问,经过亲测出现了最为严重的问题,按照当时的方法配置好之后发现本机Mac通过localhost/<项目名>和127.0.0.1/<项目名>可以访问,此时很是兴奋,但出现了最根本的问题,那就是同局域网内其他机器通过访问IP地址/<项目名>(例如:IP地址是192.168.0.106,那么其他机器访问

  • centos 6.5下修改SSH端口及禁用root远程登录的方法

    前言 我们大家都知道 SSH 的默认端口为 22,但是基于安全的需要,我们需要修改服务器的 SSH 端口,和禁用 root 远程登录. 通过以下步骤,我们通过编辑 /etc/ssh/sshd_config ,将端口修改为 10089,并禁用 root 远程登录,同时为新端口添加防火墙规则,并删除默认端口的规则. 注意:1,使用 root 用户执行以下步骤:2,只在 CentOS 6.5 下验证. 修改端口 vi /etc/ssh/sshd_config Port 10089 #端口号 Permi

随机推荐