SSH 隧道:端口转发功能详解!

2024-06-17 14:32:40 浏览数 (2)

简介

SSH 隧道是一种安全的数据传输方法,它允许我们在不安全的网络上建立一个安全的连接。SSH 隧道提供两大功能:

  • 加密 SSH 客户端至 SSH 服务端之间的数据通讯。
  • 突破防火墙的限制去完成一些之前无法建立的 TCP 连接。

SSH 隧道的主要功能之一是端口转发,它是一种通过 SSH 协议在本地和远程主机之间建立安全通道,实现端口之间的数据转发的方法。它允许用户在不直接访问目标主机的情况下,通过安全的 SSH 连接来访问该主机上的服务。

我们正在使用的一些 SSH 远程终端工具如:,也可以通过它的可视化界面来配置端口转发功能。

用途或应用场景

SSH端口转发具有广泛的用途,包括但不限于:

  • 安全远程访问:通过 SSH 端口转发,可以安全地访问位于防火墙后面的服务。
  • 绕过网络限制:当本地网络限制了某些服务的访问时,可以使用 SSH 端口转发来绕过这些限制。
  • 代理服务器:动态端口转发可以创建一个 SOCKS 代理服务器,用于通过中间节点访问特定网络资源。
  • 加密通信:SSH 端口转发提供了加密的通信通道,确保数据在传输过程中的安全性。这对于保护敏感信息非常重要,尤其是在不安全的网络环境中。
  • 访问内部网络资源:对于公司或组织的内部网络资源,通过 SSH 端口转发可以实现安全的远程访问,而无需VPN或其他复杂的网络配置。
  • 远程管理和调试:系统管理员或开发人员可以利用 SSH 端口转发来远程管理和调试服务器上的服务,而无需在服务器上直接暴露这些服务。

端口转发类型

本地端口转发

本地端口转发:数据从本地机器流向远程机器,然后从远程机器流回本地机器。

适用于需要访问位于防火墙后面或者只能在远程主机上访问的服务的情况。

远程端口转发

远程端口转发:数据从远程机器流向本地机器,然后从本地机器流回远程机器。

适用于需要将远程主机上的某个服务映射到本地主机上,或者需要远程主机上的其他计算机访问本地主机上的服务的情况。

注意:远程端口转发通常需要在远程主机上进行配置。

命令语法格式

SSH 关于端口转发会使用到的一些参数说明如下:

代码语言:javascript复制
-C #压缩传输,增加传输的效率
-f #将 SSH 传输放在后台执行
-N #建立静默连接
-g #复用访问时作为网关,支持多主机访问本地监听端口
-L #本地端口转发
-R #远程端口转发
-D #动态转发
-P #指定 SSH 的端口

本地端口转发的命令格式是:

代码语言:javascript复制
ssh -L local_port:remote_host:remote_port username@ssh_server

其中,local_port本地机器上监听的端口,remote_host是远程服务器的地址,remote_port是远程服务器上服务的端口,username是远程服务器的登录用户名,ssh_server是用来建立SSH隧道的服务器地址。

远程端口转发的命令格式是:

代码语言:javascript复制
ssh -R remote_port:local_host:local_port username@ssh_server

其中,remote_port是远程服务器上监听的端口,local_host是本地机器的地址,local_port是本地机器上服务的端口。

实例说明

例1:要将本地的8080端口转发到远程服务器的80端口,可以使用以下命令:

代码语言:javascript复制
ssh -L 8080:localhost:80 username@sshserver

例2:要将远程服务器的8080端口转发到本地的80端口,可以使用以下命令:

代码语言:javascript复制
ssh -R 8080:localhost:80 username@sshserver

在这些命令中,username@sshserver是用来建立SSH隧道的初始登录信息。一旦建立了 SSH 隧道,就可以通过本地的8080端口访问远程服务器上的80端口,或者通过远程服务器的8080端口访问本地的80端口。

扩展知识点

跨机器转发

环境说明:我们想要在 A 与 B 服务器之间创建隧道,最终通过隧道访问到ServerC 中的 http 服务。

  • ServerA_IP:192.168.10.1
  • ServerB_IP:192.168.10.2
  • ServerC_IP:192.168.10.3

ServerA 与 ServerB 上没有开启任何 http 服务,ServerC 中开启了 http 服务并监听 8080 端口。

这里如果 ServerA 想要访问 ServerC 上运行的 http 服务,但由于网络限制,ServerA 无法直接访问 ServerC。因此,我们计划通过ServerB 作为跳板机,利用 SSH 端口转发来实现 ServerA 对 ServerC 的访问。

配置如下

我们在 ServerA 上开启 ssh 隧道,命令如下:

代码语言:javascript复制
ssh -N -L 8080:192.168.10.3:8080 root@192.168.10.2

现在 serverA 上已经开始监听 8080 端口了,默认是在本地回环地址上,需要其他机器访问的话可以指定 ip 或者增加 -g 参数开启网关模式。

代码语言:javascript复制
[root@ServerA ~]# netstat -tunlp|grep 8888                                             
tcp        0      0 127.0.0.1:8080         0.0.0.0:*               LISTEN      32464/ssh
tcp6       0      0 ::1:8080               :::*                    LISTEN      32464/ssh 

注:此模式下会存在数据安全问题,因为 ServerB 与 ServerC 之间的数据传输还是明文的,ServerA 与 ServerB 之间的数据传输是受 SSH 隧道保护的,所以,这里我们首先需要考虑的 ServerB 与 ServerC 之间的网络可靠性。

总结

总之,SSH端口转发是一种强大的工具,可以通过SSH连接实现本地和远程主机之间的安全通信和数据转发。通过合理配置和使用SSH端口转发功能,可以方便地访问受限服务、绕过网络限制以及创建代理服务器等。

0 人点赞