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

文章目录

  • 前言
  • 一、解锁内部服务:SSH 本地转发
    • 1.1 什么是 SSH 本地转发
    • 1.2 本地转发应用场景
  • 二、打开外部访问大门:SSH 远程转发
    • 2.1 什么是 SSH 远程转发
    • 2.2 远程转发应用场景
  • 三、动态转发:SSH 让你拥有自己的 VPN
    • 3.1 什么是 SSH 动态转发
    • 3.2 动态转发应用场景
  • 四、小结
  • 推荐阅读

前言

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 插件:定制化你的持久层框架

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/37881.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

memory动态内存管理学习之weak_ptr

此头文件是动态内存管理库的一部分。std::weak_ptr 是一种智能指针,它持有对被 std::shared_ptr 管理的对象的非拥有性(“弱”)引用。在访问所引用的对象前必须先转换为 std::shared_ptr。std::weak_ptr 用来表达临时所有权的概念&#xff1a…

three.js实现雪花场景效果

点击获取雪花图片素材 提取码:lywa // 雪花效果 import * as THREE from "three" export function getsnowEffect(th) {console.log(th, th) // this 场景var that th// 创建一个BufferGeometry对象,用于存储顶点数据 const geometry new THREE.Buffe…

大模型微调实战之基于星火大模型的群聊对话分角色要素提取挑战赛:Task01:跑通Baseline

目录 0 背景1 环境配置1.1 下载包1.2 配置密钥1.3 测试模型 2 解决问题2.1 获取数据2.2 设计Prompt2.2 设计处理函数2.3 开始提取 附全流程代码 0 背景 Datawhale AI夏令营第二期开始啦,去年有幸参与过第一期,收获很多,这次也立马参与了第二…

VMware ESXi 技术

目录 一、VMware ESXi安装 1. 在VMware WorkStation中创建一台虚拟机 2. 进入VMware ESXi控制台 3. 配置VMware ESXi网络 二、使用Web网页端登录管理ESXi 1. 分配许可证密钥(选做) 2. 管理ESXi 三、VMware ESXi控制台 1. 创建虚拟机 2. 定制虚拟…

Webpack: 开发 PWA、Node、Electron 应用

概述 毋庸置疑,对前端开发者而言,当下正是一个日升月恒的美好时代!在久远的过去,Web 页面的开发技术链条非常原始而粗糙,那时候的 JavaScript 更多用来点缀 Web 页面交互而不是用来构建一个完整的应用。直到 2009年5月…

LINUX操作系统:Mx Linux,用虚拟机VMware Workstation安装体验

需求说明: 操作系统目前流行有Windows、Linux、Unix等,中国人应该要知道国有操作系统,也要支持国产操作系统,为了更好支持国产操作系统,我们也要知己知彼,那么今天就来体验一把操作系统Mx_Linux_23.2的安装…

分享一个下载windows系统镜像包的网站

下载各种操作系统(比如Windows、Linux、MacOS等)比较快的镜像站点,我尝试过这个不错,提供了BT连接,可以用迅雷软件下载,速度很快的! 入口地址:NEXT, ITELLYOU 1)打开网站…

[深度学习] Transformer

Transformer是一种深度学习模型,最早由Vaswani等人在2017年的论文《Attention is All You Need》中提出。它最初用于自然语言处理(NLP)任务,但其架构的灵活性使其在许多其他领域也表现出色,如计算机视觉、时间序列分析…

MySQL高级-SQL优化- limit优化(覆盖索引加子查询)

文章目录 0、limit 优化0.1、从表 tb_sku 中按照 id 列进行排序,然后跳过前 9000000 条记录0.2、通过子查询获取按照 id 排序后的第 9000000 条开始的 10 条记录的 id 值,然后在原表中根据这些 id 值获取对应的完整记录 1、上传5个sql文件到 /root2、查看…

libctk shared library的设计及编码实践记录

一、引言 1.1 <libctk>的由来 1.2 <libctk>的设计理论依据 1.3 <libctk>的设计理念 二、<libctk>的依赖库 三、<libctk>的目录说明 四、<libctk>的功能模块及使用实例说明 4.1 日志模块 4.2 mysql client模块 4.3 ftp client模块 4…

鸿蒙开发设备管理:【@ohos.geolocation (位置服务)】

位置服务 说明&#xff1a; 本模块首批接口从API version 7开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import geolocation from ohos.geolocation;geolocation.on(‘locationChange’) on(type: ‘locationChange’, request: L…

安卓开发自定义时间日期显示组件

安卓开发自定义时间日期显示组件 问题背景 实现时间和日期显示&#xff0c;左对齐和对齐两种效果&#xff0c;如下图所示&#xff1a; 问题分析 自定义view实现一般思路&#xff1a; &#xff08;1&#xff09;自定义一个View &#xff08;2&#xff09;编写values/attrs.…

poi-tl 生成 word 文件(插入文字、图片、表格、图表)

文章说明 本篇文章主要通过代码案例的方式&#xff0c;展示 poi-tl 生成 docx 文件的一些常用操作&#xff0c;主要涵盖以下内容 &#xff1a; 插入文本字符&#xff08;含样式、超链接&#xff09;插入图片插入表格引入标签&#xff08;通过可选文字的方式&#xff0c;这种方…

大模型和数据库最新结合进展

写在前面 本文主要内容是上次接受 infoQ 访谈&#xff0c;百度智能云朱洁老师介绍了大模型和 AI 结合相关话题&#xff0c;这次整体再刷新下&#xff0c;给到对这个领域感兴趣的同学。 当前&#xff0c;百度智能云云数据库特惠专场开始&#xff01;热销规格新用户免费使用&am…

最逼真的简易交通灯设计

最逼真的简易交通灯设计 需要资料的请在文章末尾获取&#xff08;有问题可以私信我哦~~&#xff09; 01 资料内容 Proteus仿真文件程序源码实物制作&#xff0c;代码修改&#xff0c;功能定制&#xff08;需额外收费&#xff0c;价格实惠&#xff0c;欢迎咨询&#xff09; …

实验场:在几分钟内使用 Elasticsearch 进行 RAG 应用程序实验

作者&#xff1a;来自 Elastic Joe McElroy, Serena Chou 什么是 Playground&#xff08;实验场&#xff09;&#xff1f; 我们很高兴发布我们的 Playground 体验 —- 一个低代码界面&#xff0c;开发人员可以在几分钟内使用自己的私人数据探索他们选择的 LLM。 在对对话式搜…

41割队伍

上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动,旨在激发青少年对学习人工智能与算法设计的热情与兴趣,提升青少年科学素养,引导青少年投身创新发现和科研实践活动。https://www.iai.sh.cn/problem/387 题目描述 给定 𝑛n 个数字 𝑎1,�…

Hi3861 OpenHarmony嵌入式应用入门--LiteOS Semaphore做同步使用

信号量作为同步使用 创建一个Semaphore对象&#xff0c;并指定一个初始的计数值&#xff08;通常称为“许可”或“令牌”的数量&#xff09;。这个计数值表示当前可用的资源数量或可以同时访问共享资源的线程数。当一个线程需要访问共享资源时&#xff0c;它会尝试从Semaphore…

加油站可视化:打造智能化运营与管理新模式

智慧加油站可视化通过图扑 HT 构建仿真的三维模型&#xff0c;将加油站的布局、设备状态、人员活动等信息动态呈现。管理者可以通过直观的可视化界面实时监控和分析运营状况&#xff0c;快速做出决策&#xff0c;提高管理效率和安全水平&#xff0c;推动加油站向智能化管理转型…

后端之路第三站(Mybatis)——结合案例讲Mybatis怎么操作sql

先讲一下准备工作整体流程要做什么 我们要基于一个员工管理系统作为案例&#xff0c;进行员工信息的【增、删、改、查】 原理就是用Mybatis通过java语言来执行sql语句&#xff0c;来达到【增、删、改、查】 一、准备工作 1、引入数据库数据 首先我们把一个员工、部门表的数…