news 2026/10/4 21:54:30

SSH隧道与端口转发完全指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SSH隧道与端口转发完全指南

本文详解SSH隧道的三种转发模式,掌握这个技能能解决很多网络访问问题。

前言

SSH不只是远程登录工具,它还是强大的网络隧道工具。

通过SSH端口转发,你可以:

  • 访问内网服务
  • 加密不安全的连接
  • 绕过防火墙限制
  • 实现简易的代理

今天来详解SSH的三种端口转发模式。


一、SSH端口转发概述

1.1 三种转发模式

模式命令参数方向用途
本地转发-L本地→远程访问远程内网服务
远程转发-R远程→本地暴露本地服务到远程
动态转发-DSOCKS代理通用代理

1.2 准备工作

# 确保SSH服务端允许转发# /etc/ssh/sshd_configAllowTcpForwardingyesGatewayPortsyes# 远程转发需要

二、本地端口转发(-L)

2.1 原理

┌─────────────────────────────────────────────────────────┐ │ 本地端口转发 (-L) │ │ │ │ 本地电脑 SSH服务器 目标服务 │ │ ┌─────┐ ┌─────┐ ┌─────┐ │ │ │:8080│ ──SSH──→ │ │ ────────→ │:3306│ │ │ └─────┘ └─────┘ └─────┘ │ │ │ │ 访问 localhost:8080 = 访问 目标服务:3306 │ └─────────────────────────────────────────────────────────┘

2.2 命令格式

ssh-L[本地地址:]本地端口:目标地址:目标端口 用户@SSH服务器# 简化ssh-L 本地端口:目标地址:目标端口 用户@SSH服务器

2.3 实战场景

场景1:访问远程MySQL

# 远程服务器有MySQL,但只允许本地访问# 通过SSH隧道访问ssh-L3307:localhost:3306 user@remote-server# 本地连接mysql -h127.0.0.1 -P3307-u root -p

场景2:访问内网Web服务

# 内网有个Web服务 192.168.1.100:8080# 通过跳板机访问ssh-L8080:192.168.1.100:8080 user@jump-server# 浏览器访问http://localhost:8080

场景3:访问Redis

ssh-L6380:localhost:6379 user@redis-server# 本地连接redis-cli -h127.0.0.1 -p6380

2.4 后台运行

# -f 后台运行# -N 不执行远程命令# -T 不分配终端ssh-fNT -L3307:localhost:3306 user@remote-server# 查看隧道进程psaux|grepssh# 关闭隧道kill<pid>

三、远程端口转发(-R)

3.1 原理

┌─────────────────────────────────────────────────────────┐ │ 远程端口转发 (-R) │ │ │ │ 本地服务 SSH服务器 远程访问 │ │ ┌─────┐ ┌─────┐ ┌─────┐ │ │ │:3000│ ←──SSH── │:8080│ ←───────── │用户 │ │ │ └─────┘ └─────┘ └─────┘ │ │ │ │ 访问 SSH服务器:8080 = 访问 本地:3000 │ └─────────────────────────────────────────────────────────┘

3.2 命令格式

ssh-R[远程地址:]远程端口:本地地址:本地端口 用户@SSH服务器

3.3 实战场景

场景1:暴露本地开发环境

# 本地跑了个Web应用在3000端口# 想让外网能访问(用于演示/测试)ssh-R8080:localhost:3000 user@public-server# 外网访问http://public-server:8080

场景2:让外网访问本地服务

# 本地有个API服务ssh-R0.0.0.0:9000:localhost:8000 user@vps# 注意:需要服务器配置 GatewayPorts yes

3.4 实现简易内网穿透

# 本地电脑没有公网IP# 但有一台公网VPS# 本地执行ssh-R2222:localhost:22 user@vps# 外网通过VPS访问本地SSHssh-p2222localuser@vps

四、动态端口转发(-D)

4.1 原理

┌─────────────────────────────────────────────────────────┐ │ 动态端口转发 (-D) = SOCKS5代理 │ │ │ │ 本地应用 SSH服务器 任意目标 │ │ ┌─────┐ ┌─────┐ ┌─────┐ │ │ │SOCKS│ ──SSH──→ │ │ ─────────→ │任意 │ │ │ │:1080│ └─────┘ └─────┘ │ │ └─────┘ │ │ │ │ 配置代理 127.0.0.1:1080 后,所有流量走SSH │ └─────────────────────────────────────────────────────────┘

4.2 命令格式

ssh-D[本地地址:]端口 用户@SSH服务器# 示例ssh-D1080user@remote-server

4.3 使用方法

# 启动SOCKS代理ssh-D1080user@remote-server# 配置浏览器/系统代理# SOCKS5 代理:127.0.0.1:1080# 或命令行使用curl--socks5127.0.0.1:1080 http://example.com# 配合proxychainsproxychainscurlhttp://example.com

五、SSH配置文件

5.1 简化命令

# ~/.ssh/config# 跳板机Host jump HostName jump.example.com User admin IdentityFile ~/.ssh/jump_key# 内网服务器(通过跳板)Host internal HostName192.168.1.100 User root ProxyJump jump# 带端口转发的连接Host mysql-tunnel HostName db-server.example.com User admin LocalForward3307localhost:3306 Host dev-proxy HostName vps.example.com User root DynamicForward1080

5.2 使用简化后的命令

# 直接连接内网服务器sshinternal# 建立MySQL隧道ssh-fNT mysql-tunnel# 启动SOCKS代理ssh-fNT dev-proxy

六、autossh保持连接

6.1 安装

# Ubuntu/Debiansudoaptinstallautossh# macOSbrewinstallautossh

6.2 使用

# 自动重连的隧道autossh -M0-fNT -L3307:localhost:3306 user@remote-server# 参数说明# -M 0:禁用监控端口,使用SSH自身的保活# -f:后台运行# -N:不执行远程命令# -T:不分配终端

6.3 开机自启(systemd)

# /etc/systemd/system/ssh-tunnel.service[Unit]Description=SSH Tunnel to MySQLAfter=network.target[Service]User=youruserExecStart=/usr/bin/autossh -M0-NL3307:localhost:3306 user@remote-serverRestart=alwaysRestartSec=10[Install]WantedBy=multi-user.target
sudosystemctlenablessh-tunnelsudosystemctl start ssh-tunnel

七、实际应用案例

7.1 案例:安全访问生产数据库

# 需求:本地IDE连接生产MySQL# 生产MySQL不对外开放# 方案:通过跳板机建立隧道ssh-L3307:prod-mysql.internal:3306 user@jump-server# IDE连接配置# Host: 127.0.0.1# Port: 3307

7.2 案例:远程调试内网服务

# 需求:访问内网的测试环境Web服务# 测试环境:192.168.1.50:8080ssh-L8080:192.168.1.50:8080 user@office-server# 浏览器访问http://localhost:8080

7.3 案例:临时暴露本地服务

# 需求:给客户演示本地开发的应用ssh-R80:localhost:3000 user@demo-server# 客户访问http://demo-server

八、SSH隧道的局限性

8.1 问题

1. 需要SSH服务器 - 你得有一台可SSH的机器 2. 单点故障 - SSH断了,隧道就断了 3. 配置较繁琐 - 每个服务都要配置 4. 不适合大流量 - SSH开销较大

8.2 更优方案

对于长期、多服务的远程访问需求,可以考虑:

  • 内网穿透工具:frp、ngrok等
  • 组网软件:如星空组网,配置更简单,所有端口直接互通

SSH隧道适合临时、单一服务的场景。


九、安全注意事项

9.1 限制转发

# /etc/ssh/sshd_config# 禁止所有转发AllowTcpForwarding no# 只允许本地转发AllowTcpForwardinglocal# 限制可转发的地址PermitOpen host1:port1 host2:port2

9.2 使用密钥认证

# 生成密钥ssh-keygen -t ed25519 -C"tunnel-key"# 复制到服务器ssh-copy-id -i ~/.ssh/tunnel-key.pub user@server# 使用密钥连接ssh-i ~/.ssh/tunnel-key user@server

十、总结

转发类型参数场景
本地转发-L访问远程内网服务
远程转发-R暴露本地服务到公网
动态转发-DSOCKS代理

常用命令速查:

# 本地转发ssh-L 本地端口:目标:端口 user@server# 远程转发ssh-R 远程端口:localhost:本地端口 user@server# SOCKS代理ssh-D1080user@server# 后台运行ssh-fNT -L...# 保持连接autossh -M0-fNT -L...

参考资料

  1. SSH手册:https://man.openbsd.org/ssh
  2. OpenSSH官网:https://www.openssh.com/

💡 SSH隧道是运维必备技能,但对于复杂的远程访问需求,专业的组网工具会更方便。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/4 10:43:34

超越批处理:构建面向流式与在线学习的数据预处理组件

好的&#xff0c;遵照您的要求。我将以 “超越批处理&#xff1a;构建面向流式与在线学习的数据预处理组件” 为主题&#xff0c;为您撰写一篇兼具深度和新颖性的技术文章。本文将从经典的批处理范式切入&#xff0c;深入探讨在实时性要求日益增高、数据概念可能漂移的现代场景…

作者头像 李华
网站建设 2026/10/4 0:20:07

6、使用 COM 构建 GUI 应用程序

使用 COM 构建 GUI 应用程序 1. 引言 在之前的开发中,我们构建了一些 Python 类,可在命令行下完成金融领域的有用工作。现在,我们要将这些 Python 类作为 COM 服务器嵌入到传统的 GUI 中,为应用程序提供核心引擎。 2. 应用场景与需求 可以设想基于这些类开发一系列应用…

作者头像 李华
网站建设 2026/10/4 1:37:41

9、Python 打印输出解决方案全解析

Python 打印输出解决方案全解析 在数据处理与展示的过程中,打印输出是一项重要需求,尤其是对于那些需要生成专业报告和文档的场景。本文将深入探讨在 Windows 系统下,使用 Python 实现打印输出的多种技术和方法,涵盖自动化 Word 文档、Windows 图形功能以及直接生成 PDF 文…

作者头像 李华
网站建设 2026/10/3 6:43:40

iOS自动化测试终极指南:WebDriverAgent完整配置与使用教程

iOS自动化测试终极指南&#xff1a;WebDriverAgent完整配置与使用教程 【免费下载链接】WebDriverAgent A WebDriver server for iOS that runs inside the Simulator. 项目地址: https://gitcode.com/gh_mirrors/we/WebDriverAgent WebDriverAgent是由Facebook开发的一…

作者头像 李华
网站建设 2026/10/4 1:37:41

深色主题的艺术:Dracula主题设计与实现全解析

深色主题的艺术&#xff1a;Dracula主题设计与实现全解析 【免费下载链接】dracula-theme &#x1f9db;&#x1f3fb;‍♂️ One theme. All platforms. 项目地址: https://gitcode.com/gh_mirrors/dr/dracula-theme 在编程的世界中&#xff0c;一个优雅的深色主题不仅…

作者头像 李华
网站建设 2026/10/4 8:41:12

MudBlazor数据表格过滤功能深度解析与实战指南

MudBlazor数据表格过滤功能深度解析与实战指南 【免费下载链接】MudBlazor Blazor Component Library based on Material design with an emphasis on ease of use. Mainly written in C# with Javascript kept to a bare minimum it empowers .NET developers to easily debug…

作者头像 李华