深入理解 SSH 端口转发:本地 vs 远程 vs 动态转发
🌟 简介
SSH 端口转发(SSH Port Forwarding)作为一种强大而灵活的技术,不仅可以帮助我们安全地访问远程服务,还能轻松突破网络限制。本文将带你深入了解 SSH 端口转发的原理、类型和实战应用。
🌈 目录
- 🌟 简介
- 🤔 什么是 SSH 端口转发?
- 🎯 主要特点:
- 📚 SSH 端口转发的三种类型
- 1. 本地端口转发(Local Port Forwarding)🖥️➡️🌐
- 1.1 原理
- 1.2 使用场景
- 1.3 命令格式
- 1.4 示例
- 2. 远程端口转发(Remote Port Forwarding)🌐➡️🖥️
- 2.1 原理
- 2.2 使用场景
- 2.3 命令格式
- 2.4 示例
- 3. 动态端口转发(Dynamic Port Forwarding)🔄
- 3.1 原理
- 3.2 使用场景
- 3.3 命令格式
- 3.4 示例
- 📊 本地端口转发 🆚 远程端口转发🆚动态端口转发
- 🛡️ 安全注意事项
- 🔧 常用选项和技巧
- ❓ 常见问题解答
- 1. 如何选择端口转发类型?🤔
- 选择本地端口转发的情况
- 选择远程端口转发的情况
- 选择动态端口转发的情况
- 2. 如何快速区分本地和远程端口转发?
- 看命令参数
- 看流量方向
- 看使用场景
- 3. 端口转发失败的常见原因?
- 🎉 总结
- 📚 延伸阅读
🤔 什么是 SSH 端口转发?
SSH 端口转发是一种通过 SSH 隧道将网络流量从一个端口安全地转发到另一个端口的技术。它就像一个加密的管道,可以保护数据在传输过程中的安全性,同时提供了灵活的网络访问方式。
🎯 主要特点:
- 🔒 安全加密:所有流量都通过 SSH 隧道加密传输
- 🌐 灵活性强:支持多种转发方式
- 🛡️ 绕过限制:可以突破防火墙限制
- 🚀 易于使用:只需简单的命令即可配置
📚 SSH 端口转发的三种类型
1. 本地端口转发(Local Port Forwarding)🖥️➡️🌐
1.1 原理
本地端口转发是将 本地机器 的某个端口通过 SSH 隧道转发到 远程机器 的某个端口。所有通过本地端口的流量都会被加密并通过 SSH 隧道传输到远程目标地址。
1.2 使用场景
- 访问远程服务:例如访问远程数据库(如 MySQL)或 Web 服务。
- 绕过防火墙:通过 SSH 隧道访问被防火墙限制的资源。
1.3 命令格式
ssh -L [本地地址:]本地端口:目标地址:目标端口 用户名@远程服务器
1.4 示例
将本地的 3306 端口转发到远程服务器的 3306 端口(用于访问远程 MySQL 服务):
ssh -L 3306:localhost:3306 user@remote_server
- 访问本地的
localhost:3306相当于访问远程服务器的localhost:3306。
2. 远程端口转发(Remote Port Forwarding)🌐➡️🖥️
2.1 原理
远程端口转发是将 远程机器 的某个端口通过 SSH 隧道转发到 本地机器 的某个端口。所有通过远程端口的流量都会被加密并通过 SSH 隧道传输到本地目标地址。
2.2 使用场景
- 暴露本地服务:将本地开发环境暴露给远程服务器,方便外部访问。
- 远程访问本地资源:允许远程用户访问本地机器上的服务。
2.3 命令格式
ssh -R [远程地址:]远程端口:目标地址:目标端口 用户名@远程服务器
2.4 示例
将远程服务器的 8080 端口转发到本地的 80 端口(用于将本地 Web 服务暴露给远程服务器):
ssh -R 8080:localhost:80 user@remote_server
- 访问远程服务器的
localhost:8080相当于访问本地的localhost:80。
3. 动态端口转发(Dynamic Port Forwarding)🔄
3.1 原理
动态端口转发是通过 SSH 创建一个 SOCKS 代理,动态地将流量转发到多个目标地址。所有通过 SOCKS 代理的流量都会被加密并通过 SSH 隧道传输。
3.2 使用场景
- 访问多个远程服务(如 HTTP、FTP)。
- 绕过网络限制或加密流量。
3.3 命令格式
ssh -D [本地地址:]本地端口 用户名@远程服务器
3.4 示例
创建一个本地 SOCKS 代理,监听 1080 端口:
ssh -D 1080 user@remote_server
- 配置浏览器或其他应用程序使用
localhost:1080作为 SOCKS 代理。
📊 本地端口转发 🆚 远程端口转发🆚动态端口转发
| 特性 | 本地端口转发(Local Port Forwarding) | 远程端口转发(Remote Port Forwarding) | 动态端口转发(Dynamic Port Forwarding) |
|---|---|---|---|
| 基本命令 | ssh -L local_port:remote_host:remote_port user@server | ssh -R remote_port:local_host:local_port user@server | ssh -D local_port user@server |
| 命令参数 | -L | -R | -D |
| 流量方向 | 本地 → 远程 | 远程 → 本地 | 动态(通过 SOCKS 代理) |
| 监听位置 | 本地机器的指定端口 | 远程服务器的指定端口 | 本地机器的 SOCKS 代理端口 |
| 主要用途 | 访问远程服务或内网资源 | 暴露本地服务给外网访问 | 提供通用的网络代理服务 |
| 典型场景 | - 访问远程数据库 - 连接内网服务 - 绕过防火墙限制 | - 展示本地开发环境 - 提供内网服务访问 - 临时文件共享 | - 网页浏览代理 - 应用程序代理 - 安全匿名访问 |
| 配置复杂度 | 简单,只需指定端口映射 | 中等,需要配置远程服务器 | 简单,但应用需支持 SOCKS |
| 安全考虑 | - 本地端口暴露风险 - 受本地防火墙保护 | - 远程端口暴露风险 - 需要注意访问控制 | - 最灵活的访问控制 - 完整的加密代理 |
| 使用限制 | - 受本地端口限制 - 单一服务转发 | - 受远程服务器策略限制 - 需要远程服务器支持 | - 需要应用支持 SOCKS - 代理性能考虑 |
| 适用环境 | - 企业内网环境 - 数据库访问 - API 服务访问 | - 开发环境展示 - 内网穿透 - 临时服务共享 | - 通用网络代理 - 安全浏览 - 科学上网 |
| 性能特点 | - 直接转发,延迟低 - 适合持续连接 | - 可能受网络条件影响 - 适合临时服务 | - 动态路由开销 - 适合多协议应用 |
| 示例用法 | - ssh -L 3306:localhost:3306 user@remote_server - ssh -L 8080:internal-web:80 user@remote_server - ssh -L 6379:redis-server:6379 user@remote_server | - ssh -R 8080:localhost:80 user@remote_server - ssh -R 3000:localhost:3000 user@remote_server - ssh -R *:8888:localhost:8888 user@remote_server | - ssh -D 1080 user@remote_server - ssh -D 0.0.0.0:7070 user@remote_server - ssh -D localhost:9090 user@remote_server |
| 示例说明 | - 访问远程MySQL数据库 - 访问内网Web服务 - 访问内网Redis服务 | - 暴露本地Web服务 - 分享本地开发服务 - 允许任意地址访问本地服务 | - 建立本地SOCKS代理 - 建立对外开放的代理 - 建立本地限制的代理 |
🛡️ 安全注意事项
-
权限控制
- 检查
sshd_config中的AllowTcpForwarding设置 - 合理配置防火墙规则
- 限制可访问的 IP 地址
- 检查
-
加密传输
- 使用强密码或密钥认证
- 定期更新 SSH 服务器
- 启用日志记录和监控
🔧 常用选项和技巧
| 选项 | 说明 | 示例 |
|---|---|---|
-f | 后台运行 | ssh -f -N -L 3306:localhost:3306 user@remote |
-N | 不执行远程命令 | ssh -N -L 8080:localhost:80 user@remote |
-g | 允许远程主机连接 | ssh -g -L 8080:localhost:80 user@remote |
-C | 启用压缩 | ssh -C -L 3306:localhost:3306 user@remote |
❓ 常见问题解答
1. 如何选择端口转发类型?🤔
选择本地端口转发的情况
- 你需要从本地机器访问远程服务器上的服务。
- 你需要绕过防火墙或网络限制。
- 示例:
- 访问远程 MySQL 数据库。
- 访问远程 Web 服务。
选择远程端口转发的情况
- 你需要将本地机器上的服务暴露给远程服务器。
- 你需要让外部用户访问本地开发环境。
- 示例:
- 将本地的 Web 服务暴露给远程服务器。
- 让远程用户访问本地的开发环境。
选择动态端口转发的情况
- 你需要访问多个远程服务(如 HTTP、FTP)。
- 你需要绕过网络限制或加密流量。
- 示例:
- 通过 SOCKS 代理访问多个网站。
- 加密所有网络流量。
2. 如何快速区分本地和远程端口转发?
看命令参数
- 本地端口转发 使用
-L参数。 - 远程端口转发 使用
-R参数。
看流量方向
- 本地端口转发:流量从本地机器流向远程机器。
- 本地机器是流量的起点,远程机器是流量的终点。
- 远程端口转发:流量从远程机器流向本地机器。
- 远程机器是流量的起点,本地机器是流量的终点。
看使用场景
- 本地端口转发:通常用于访问远程服务(如数据库、Web 服务)。
- 远程端口转发:通常用于将本地服务暴露给远程服务器。
3. 端口转发失败的常见原因?
- SSH 服务器禁用了端口转发
- 防火墙阻止了连接
- 端口已被占用
- 权限不足
🎉 总结
SSH 端口转发是一个强大的工具,它不仅可以帮助我们安全地访问远程服务,还能解决各种网络访问的问题。通过本文的学习,相信你已经掌握了 SSH 端口转发的基本概念和使用方法。在实际应用中,根据具体需求选择合适的端口转发类型,并注意安全配置,就能充分发挥 SSH 端口转发的优势。
📚 延伸阅读
SSH 端口转发 vs Docker 端口映射:核心思想相同,实现大不同!
📢 互动时间: 你在工作中使用过 SSH 端口转发吗?欢迎在评论区分享你的经验和心得! 💬
相关文章:
深入理解 SSH 端口转发:本地 vs 远程 vs 动态转发
🌟 简介 SSH 端口转发(SSH Port Forwarding)作为一种强大而灵活的技术,不仅可以帮助我们安全地访问远程服务,还能轻松突破网络限制。本文将带你深入了解 SSH 端口转发的原理、类型和实战应用。 🌈 目录 &a…...
postman请求参数化
postman界面介绍 一、使用环境变量(Environment Variables)进行参数化 1、在请求中使用环境变量 在请求的url、请求头(Headers)、请求体(Body)等部分都可以使用环境变量。 URL 部分示例 点击 Postman 界面右上角的 “眼睛” 图标(Environment Quick Look)打开环境管理…...
基于 WEB 开发的汽车养护系统设计与实现
标题:基于 WEB 开发的汽车养护系统设计与实现 内容:1.摘要 本文介绍了基于 WEB 开发的汽车养护系统的设计与实现。文章首先阐述了系统的背景和目的,即随着汽车保有量的增加,汽车养护需求日益增长,传统的汽车养护方式已经无法满足人们的需求&…...
Nginx正向代理配置
Nginx 正向代理默认只支持 http 协议,不支持 https 协议,需借助 "ngx_http_proxy_connect_module" 模块实现 https 正向代理,详情请参考: https://github.com/chobits/ngx_http_proxy_connect_module 安装Nginx某些模块…...
本地仓库管理之当前分支内的操作
以刚搭建好的git仓库为例,刚搭建完的仓库只有master分支,使用git branch查看当前的分支情况。 elfubuntu:~/work/example/hello$ git branch *所在分支为当前分支,即master分支 当前分支进行源码修改时简单流程图如下: 在当前分…...
《内网穿透:网络拓展与安全防护的平衡艺术》
一、引言:开启内网穿透的大门 在当今数字化浪潮席卷全球的时代,网络已成为人们生活和工作中不可或缺的一部分。我们日常使用的网络,如同一个庞大而复杂的生态系统,其中内网和外网犹如两个相互关联却又有所区别的世界。 想象一下…...
【python写个可以运行的2048小游戏】
写一个完整的2048小游戏在Python中是一个相对复杂的任务,因为它涉及到用户界面、事件处理、游戏逻辑等多个方面。为了简化这个过程,我们可以使用Python的图形库,比如pygame。下面是一个简单的2048游戏的实现。 首先,确保你已经安…...
【Flink系列】9. Flink容错机制
9. 容错机制 在Flink中,有一套完整的容错机制来保证故障后的恢复,其中最重要的就是检查点。 9.1 检查点(Checkpoint) 9.1.1 检查点的保存 1)周期性的触发保存 “随时存档”确实恢复起来方便,可是需要我…...
DETR论文阅读
1. 动机 传统的目标检测任务需要大量的人工先验知识,例如预定义的先验anchor,NMS后处理策略等。这些人工先验知识引入了很多人为因素,且较难处理。如果能够端到端到直接生成目标检测结果,将会使问题变得很优雅。 2. 主要贡献 提…...
关于vite+vue3+ts项目中env.d.ts 文件详解
env.d.ts 文件是 Vite 项目中用于定义全局类型声明的 TypeScript 文件。它帮助开发者向 TypeScript提供全局的类型提示,特别是在使用一些特定于 Vite 的功能时(如 import.meta.env)。以下是详细讲解及代码示例 文章目录 **1. env.d.ts 文件的…...
如何优化Elasticsearch大文档查询?
记录一次业务复杂场景下DSL优化的过程 背景 B端商城业务有一个场景就是客户可见的产品列表是需要N多闸口及各种其它逻辑组合过滤的,各种闸口数据及产品数据都是存储在ES的(有的是独立索引,有的是作为产品属性存储在产品文档上)。 在实际使用的过程中&a…...
Kotlin Bytedeco OpenCV 图像图像54 透视变换 图像矫正
Kotlin Bytedeco OpenCV 图像图像54 透视变换 图像矫正 1 添加依赖2 测试代码3 测试结果 在OpenCV中,仿射变换(Affine Transformation)和透视变换(Perspective Transformation)是两种常用的图像几何变换方法。 变换方…...
Linux中DataX使用第一期
简介 DataX 是阿里云 DataWorks数据集成 的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS, databen…...
[Qt]事件-鼠标事件、键盘事件、定时器事件、窗口改变事件、事件分发器与事件过滤器
目录 前言:Qt与操作系统的关系 一、Qt事件 1.事件介绍 2.事件的表现形式 常见的Qt事件: 常见的事件描述: 3.事件的处理方式 处理鼠标进入和离开事件案例 控件添加到对象树底层原理 二、鼠标事件 1.鼠标按下和释放事件(单击&#x…...
关于机器学习的一份总结
在之前的文章中分别有详细的关于机器学习中某一学习算法的介绍,但缺少一个总体关于机器学习的总结,所以在这篇文中就是关于机器学习的一份总结。 在最近的日子中,人工智能日益火热起来,而机器学习是其中举足轻重的一部分…...
推荐一个开源的轻量级任务调度器!TaskScheduler!
大家好,我是麦鸽。 这次推荐一款轻量级的嵌入式任务调度器,目前已经有1.4K的star,这个项目比较轻量化,只有5个源文件,可以作为学习的一个开源项目。 核心文件 项目概述: 这是一个轻量级的协作式多任务处理&…...
【18】Word:明华中学-儿童医保❗
目录 题目 NO2 NO3 NO4 NO5 NO6 NO7 NO8 NO9 题目 NO2 布局→页面设置对话框→纸张方向:横向→纸张大小:A3 ;页面设置对话框:直接输入纸张大小的宽度和高度即可→页面设置对话框:上下左右边距→版式&…...
如何用selenium来链接并打开比特浏览器进行自动化操作(1)
前言 本文是该专栏的第76篇,后面会持续分享python爬虫干货知识,记得关注。 本文,笔者将基于“比特浏览器”,通过selenium来实现链接并打开比特浏览器,进行相关的“自动化”操作。 值得一提的是,在本专栏之前,笔者有详细介绍过“使用selenium或者pyppeteer(puppeteer)…...
基于springboot+thymeleaf+Redis仿知乎网站问答项目源码
项目介绍 基于springbootthymeleafRedis仿知乎网站问答项目源码,可以作为毕业设计项目参考学习 按照需要一定动手能力 发文章,发视频,发想法,提问回答,注册登录 开发环境 使用技术:springbootthymeleafRe…...
读spring官方文档的一些关键知识点介绍
目录 bean definitionBeanPostProcessorBeanFactoryPostProcessorComponent and Further Stereotype AnnotationsAOP Concepts bean definition https://docs.spring.io/spring-framework/docs/5.1.3.RELEASE/spring-framework-reference/core.html#beans-child-bean-definiti…...
3分钟搭建PUBG终极雷达:免费实现战场全透视的完整指南
3分钟搭建PUBG终极雷达:免费实现战场全透视的完整指南 【免费下载链接】PUBG-maphack-map this is a working copy online-map from jussihi/PUBG-map-hack, use nodejs webserver instead of firebase. 项目地址: https://gitcode.com/gh_mirrors/pu/PUBG-maphac…...
AI原生研发供应商怎么选?2024最新Gartner交叉验证的5大否决项与3个隐形红线
第一章:AI原生软件研发供应商评估标准的范式迁移 2026奇点智能技术大会(https://ml-summit.org) 传统软件供应商评估体系聚焦于项目交付周期、人力成本与文档完备性,而AI原生软件的研发本质已发生根本性转变:模型即服务(MaaS&am…...
intv_ai_mk11在金融投教中的应用:专业术语解释与投资建议生成案例
intv_ai_mk11在金融投教中的应用:专业术语解释与投资建议生成案例 1. 金融投教场景的痛点分析 在金融投资教育领域,普通投资者常常面临两大核心挑战: 专业术语理解障碍:金融领域充斥着大量专业词汇和复杂概念,如&quo…...
DXVK终极指南:彻底解决GTA IV在Linux上的纹理模糊问题
DXVK终极指南:彻底解决GTA IV在Linux上的纹理模糊问题 【免费下载链接】dxvk Vulkan-based implementation of D3D8, 9, 10 and 11 for Linux / Wine 项目地址: https://gitcode.com/gh_mirrors/dx/dxvk 你是否曾经在Linux上畅玩《GTA IV》时,发现…...
OfficeToPDF:企业级文档自动化转换解决方案深度指南
OfficeToPDF:企业级文档自动化转换解决方案深度指南 【免费下载链接】OfficeToPDF A command line tool to convert Microsoft Office documents to PDFs 项目地址: https://gitcode.com/gh_mirrors/of/OfficeToPDF 在当今数字化工作流中,大规模文…...
基于Simulink的2ASK调制解调系统建模与性能对比分析
1. 2ASK调制解调系统基础入门 第一次接触通信系统仿真时,我被各种调制方式搞得头晕眼花。直到用Simulink搭建了第一个2ASK模型,才发现原来通信原理可以这么直观。**2ASK(二进制幅移键控)**是最基础的数字调制方式之一,…...
STC89C51与L298N驱动的超声波智能避障小车全流程开发指南
1. 项目概述与硬件选型 智能避障小车是嵌入式开发的经典练手项目,它能综合运用传感器技术、电机控制和实时数据处理等核心技能。这次我们要做的是一款基于STC89C51单片机L298N电机驱动HC-SR04超声波模块的智能小车,成本控制在200元以内,但功能…...
一句话出全套商品图,这才是电商人该用的 AI 神器
几年前大家都在喊不出海就出局,那是抢地盘的时代。现在地盘抢完了,拼的是谁的锄头更快。过去一年,生成式AI从尝鲜变成了标配,从选品预测到广告投放,AI已经渗透进了生意的每一个毛细血管。但要说冲击最大、体感最强的&a…...
Windows 11终极清理指南:Win11Debloat一键优化你的系统体验
Windows 11终极清理指南:Win11Debloat一键优化你的系统体验 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter a…...
打造沉浸式智能AI问答助手:Vue + UniApp 全端实战(支持 Markdown/公式/多模态交互)芈
OCP原则 ocp指开闭原则,对扩展开放,对修改关闭。是七大原则中最基本的一个原则。 依赖倒置原则(DIP) 什么是依赖倒置原则 核心是面向接口编程、面向抽象编程, 不是面向具体编程。 依赖倒置原则的目的 降低耦合度&#…...
