深入 SSH:解锁本地转发、远程转发和动态转发的潜力

前言

SSH(Secure Shell)不仅是一个用于安全远程登录的协议,还支持多种类型的端口转发功能,包括本地转发、远程转发和动态转发。这些功能使我们能够灵活地通过 SSH 隧道在不同网络环境中安全地传输数据。本文将详细介绍这三种转发方式及其应用场景。

一、解锁内部服务:SSH 本地转发

1.1 什么是 SSH 本地转发

SSH 本地转发(SSH Local Port Forwarding)是一种通过 SSH 隧道将本地计算机的端口转发到远程服务器的特定端口的方法。其主要目的是在本地访问远程服务器上的服务,确保通信过程中的数据安全性。

在这里插入图片描述

  1. 用户发起 SSH 连接命令:用户在本地主机上使用 SSH 命令发起连接,指定本地端口和远程主机及其端口。例如:

    # 这条命令表示将本地主机的某个端口(本地端口)映射到远程主机的某个端口(远程端口),通过 SSH 服务器进行连接。
    ssh -L 本地端口:远程主机:远程端口 用户名@SSH服务器
    
  2. 建立 SSH 连接:本地主机与 SSH 服务器建立 SSH 连接,确保通信的安全性。

  3. 用户访问本地端口:用户通过访问本地主机的 localhost:本地端口,实际访问到远程主机上的服务。所有访问 localhost:本地端口 的请求都会通过 SSH 隧道转发到远程主机的远程端口。

  4. SSH 隧道转发请求:SSH 服务器接收到来自本地主机的请求,通过 SSH 隧道将这些请求转发到远程主机的远程端口。

  5. 远程主机处理请求:远程主机上的服务接收并处理请求,然后将响应结果返回给 SSH 服务器,SSH 服务器再通过 SSH 隧道将结果返回给本地主机,最终用户在本地主机上获取到结果。

1.2 本地转发应用场景

假设有一个数据库服务器 dbserver.com,它的端口 3306 仅对内部网络开放。你可以通过中转服务器 sshserver.com 访问该数据库。

ssh -L 3306:dbserver.com:3306 user@sshserver.com

执行上述命令后,您可以通过访问 localhost:3306 来连接到 dbserver.com 上的 MySQL 数据库。

在这里插入图片描述

  1. 在本地计算机上运行 ssh -L 3306:dbserver.com:3306 user@sshserver.com
  2. 本地计算机在 localhost:3306 上监听。
  3. 当本地应用程序连接到 localhost:3306 时,SSH 客户端通过 SSH 隧道将请求转发到 sshserver.com。
  4. sshserver.com 将请求转发到 dbserver.com:3306。
  5. 数据库服务器返回的响应通过相同的路径返回到本地计算机。

二、打开外部访问大门:SSH 远程转发

2.1 什么是 SSH 远程转发

SSH 远程转发(SSH Remote Port Forwarding)是一种通过SSH隧道在远程服务器和本地计算机之间安全地转发网络流量的技术。它允许将远程服务器上的某个端口的流量通过SSH隧道传输到本地计算机上的指定端口。这种方式通常用于在安全的 SSH 连接上访问远程服务器内网中的资源,而无需直接暴露这些资源。

在这里插入图片描述

  1. 用户 A 发起连接:用户A在本地主机上使用SSH命令发起远程转发连接。示例命令为:

    #   该命令中,远程端口是SSH服务器上的端口,本地主机是用户A的本地计算机,本地端口是本地主机上的端口,用户名是SSH服务器上的用户名,SSH服务器是远程SSH服务器的地址。
    ssh -R 远程端口:本地主机:本地端口 用户名@SSH服务器
    
  2. 建立 SSH 连接:本地主机与 SSH 服务器之间建立 SSH 连接。这一步骤确保所有数据都通过安全的 SSH 隧道传输。

  3. 用户 B 访问服务:远程主机上的用户 B 试图通过 SSH 服务器访问本地主机上的服务。

  4. 请求转发:SSH 服务器接收到用户 B 的请求后,通过已建立的 SSH 隧道将请求转发到用户 A 的本地主机上的端口。

  5. 响应返回:本地主机将响应通过 SSH 隧道发送回 SSH 服务器,SSH 服务器再将响应转发回远程主机。

2.2 远程转发应用场景

假设你在本地计算机上运行了一个 Web 服务器(例如:localhost:80),希望通过中转服务器 sshserver.com 让远程用户访问该 Web 服务器。

ssh -R 8080:localhost:80 user@sshserver.com

执行上述命令后,远程用户可以通过访问 sshserver.com:8080 来连接到本地计算机上的 Web 服务器。

在这里插入图片描述

  1. 在本地计算机上运行 ssh -R 8080:localhost:80 user@sshserver.com
  2. SSH 服务器在 sshserver.com:8080 上监听。
  3. 当远程用户连接到 sshserver.com:8080 时,SSH 服务器通过 SSH 隧道将请求转发到本地计算机上的 localhost:80。
  4. 本地计算机返回的响应通过相同的路径返回到远程用户。

三、动态转发:SSH 让你拥有自己的 VPN

3.1 什么是 SSH 动态转发

SSH 动态转发(SSH Dynamic Port Forwarding)是一种通过 SSH 隧道实现的代理功能,它允许在本地计算机上创建一个 SOCKS 代理服务器,从而使得所有通过这个代理的流量都通过 SSH 隧道加密并转发到远程服务器。与本地转发和远程转发不同,动态转发不需要预先指定目标主机和端口,而是可以动态地决定目的地,这使其更加灵活。

在这里插入图片描述

  1. 用户发起连接:用户在本地主机上使用 SSH 命令发起动态转发连接。示例命令为:

    # 该命令中,本地代理端口是本地计算机上打开的SOCKS代理端口,用户名是SSH服务器上的用户名,SSH服务器是远程SSH服务器的地址。
    ssh -D 本地代理端口 用户名@SSH服务器
    
  2. 建立 SSH 连接:本地主机与 SSH 服务器之间建立 SSH 连接。这一步确保所有数据都通过安全的 SSH 隧道传输。

  3. 设置本地 SOCKS 代理:本地计算机在指定端口(例如 8080)上启动一个 SOCKS 代理。任何发送到该端口的流量都会通过 SSH 隧道转发到远程服务器。

  4. 用户配置应用程序:用户配置需要通过代理访问网络的应用程序(如浏览器),使其使用本地 SOCKS 代理端口(例如 8080)。

  5. 应用程序发出请求:用户在应用程序中访问某个远程服务器(例如访问某个网站)。应用程序的请求首先发送到本地 SOCKS 代理端口。

  6. 请求转发:本地计算机捕获通过 SOCKS 代理端口的请求,通过已建立的 SSH 隧道将请求加密并转发到 SSH 服务器。

  7. SSH 服务器处理请求:SSH 服务器接收到请求后,根据请求中的目标地址和端口访问远程服务器。

  8. 远程服务器处理请求并返回响应:远程服务器接收请求后进行处理,生成响应数据,并将其返回给 SSH 服务器。SSH 服务器将响应数据通过 SSH 隧道加密并发送回本地主机。

3.2 动态转发应用场景

假设你希望通过中转服务器 sshserver.com 访问多个远程网站(例如:example.com)。可以在本地设置一个 SOCKS 代理。

ssh -D 1080 user@sshserver.com

执行上述命令后,可以配置浏览器或其他应用程序使用 localhost:1080 作为 SOCKS 代理,通过中转服务器访问任意远程网站。

在这里插入图片描述

  1. 在本地计算机上运行 ssh -D 1080 user@sshserver.com。
  2. 本地计算机在 localhost:1080 上监听。
  3. 应用程序通过 SOCKS 代理连接到 localhost:1080。
  4. SSH 客户端根据请求的目标地址,通过 SSH 隧道将请求转发到 sshserver.com。
  5. sshserver.com 将请求转发到目标服务器(例如:example.com)。
  6. 目标服务器返回的响应通过相同的路径返回到本地计算机。

四、小结

SSH 的本地转发、远程转发和动态转发功能为用户提供了强大的网络访问和安全保障。这些功能不仅提升了网络操作的灵活性,还增强了数据传输的安全性。掌握这些 SSH 技术,可以在日常工作中更加高效和安全地访问各种网络资源。

推荐阅读

  1. 深入探究 Spring Boot Starter:从概念到实践
  2. 深入理解 Java 中的 volatile 关键字
  3. OAuth 2.0:现代应用程序的授权标准
  4. Spring 三级缓存
  5. 深入了解 MyBatis 插件:定制化你的持久层框架
  • 22
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本地端口转发是通过SSH连接在本地主机上执行的命令。它允许将本地主机上的一个端口转发远程主机上的另一个端口。通过这种方式,可以在本地主机上访问远程主机上的服务。例如,可以将本地主机的8080端口转发远程主机的80端口,这样就可以通过在本地浏览器中访问localhost:8080来访问远程主机上的网页服务。\[1\] 要执行本地端口转发,可以使用以下命令: ``` ssh -L <本地端口>:<目标主机>:<目标端口> <用户名>@<远程主机> ``` 其中,<本地端口>是要转发的本地主机端口,<目标主机>是要连接的远程主机的IP地址或主机名,<目标端口>是要转发到的远程主机端口,<用户名>是远程主机的用户名,<远程主机>是要连接的远程主机的IP地址或主机名。\[1\] 例如,要将本地主机的8080端口转发远程主机的80端口,可以使用以下命令: ``` ssh -L 8080:localhost:80 user@example.com ``` 这将在本地主机上建立一个监听8080端口的SSH隧道,并将所有流量转发远程主机的80端口。然后,可以通过在本地浏览器中访问localhost:8080来访问远程主机上的网页服务。\[1\] #### 引用[.reference_title] - *1* *2* *3* [一文彻底搞懂ssh端口转发](https://blog.csdn.net/MyySophia/article/details/128211718)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值