Keep learning, keep living...

0%

SSH端口转发

SSH不仅可以使用远程管理主机,还可以利用SSH客户端和SSH服务器之间的加密连接为其他服务实际中继服务,这一般称为SSH隧道(SSH Tunneling)或者SSH端口转发

SSH端口转发分为三种类型:

  • 动态端口转发
  • 本地端口转发
  • 远程端口转发

无论是哪种端口转发,整个过程都涉及四个角色:

  • 业务客户端
  • SSH客户端
  • SSH服务器
  • 业务服务端

这些角色进程并不要求都位于独立主机上,它们可以位于同一台主机上,使用localhost或者127.0.0.1进行网络访问。

本文基于这4种角色来简要说明这三种端口转发的过程。三种端口转发都依赖SSH客户端SSH服务器建立一个加密连接在二者之间转发数据。

动态端口转发

动态端口转发主要用于使能访问SSH客户端地址的进程通过SSH隧道访问SSH服务器能访问的服务。它的一般场景是:

  1. 业务客户端需要访问多个无法直接访问的服务
  2. 业务客户端可以访问SSH客户端所在机器的某个端口
  3. SSH服务器可以访问这些服务

在这种场景下,SSH客户端为这些客户端提供SOCKS5代理功能。SOCKS5说明可以参考之前的文章<<SOCKS5和Danted分析>>

访问过程可理解为:

  1. SSH客户端SSH服务器之间建立加密连接
  2. SSH客户端在指定端口启动SOCKS5服务器
  3. 业务客户端使用SOCKS5协议连接SSH客户端监听的代理端口
  4. SSH客户端将请求通过加密连接发送到SSH服务器
  5. SSH服务器将相关请求发送到SOCKS5协议中指定的目标地址

如图所示:

以上图中IP/端口为示例,启用的SSH命令格式为:

1
ssh -D 1234 -N root@2.2.2.2
本地端口转发

本地端口转发和动态端口转发场景类似,但只需要访问一个无法直接连通的服务:

  1. 业务客户端需要某个无法直接访问的服务
  2. 业务客户端可以访问SSH客户端所在机器的某个端口
  3. SSH服务器可以访问这个服务

访问过程可理解为:

  1. SSH客户端SSH服务器之间建立加密连接
  2. SSH客户端在指定端口启动代理
  3. 业务客户端使用原生协议访问SSH客户端监听的代理端口
  4. SSH客户端将请求通过加密连接发送到SSH服务器
  5. SSH服务器将相关请求发送到指定的目标地址

如图所示:

以上图中IP/端口为示例,启用的SSH命令格式为:

1
ssh -L 1.1.1.1:1234:2.2.2.3:80 -N root@2.2.2.2
远程端口转发

远程端口访问主要用于使能够访问SSH服务端地址的进程来访问SSH客户端能访问的服务。它的一般场景为:

  1. SSH客户端SSH服务器之间建立加密连接
  2. SSH服务端在指定端口启动代理
  3. 业务客户端使用原生协议访问SSH服务端监听的代理端口
  4. SSH服务端将请求通过加密连接发送到SSH客户端
  5. SSH客户端将相关请求发送到指定的目标地址

如图所示:

以上图中IP/端口为示例,启用的SSH命令格式为:

1
ssh -R 2.2.2.2:1234:1.1.1.2:80 -N root@2.2.2.2

参考: