Skip to content
清晨的一缕阳光
返回

SSH 隧道配置完全指南:远程转发与本地转发实战

前言

SSH 隧道是一种强大的网络技术,它允许我们通过 SSH 连接在本地和远程主机之间建立安全的通信通道。本文将详细介绍 SSH 隧道的两种主要模式:远程端口转发本地端口转发,帮助你在不同场景下灵活运用。

SSH 隧道基础概念

什么是 SSH 隧道

SSH 隧道利用 SSH 协议的加密特性,在不安全的网络环境中创建一个安全的通信通道。它可以用来:

两种核心模式

模式方向用途
远程转发 (-R)远程 → 本地将本地服务暴露到公网
本地转发 (-L)本地 → 远程访问远程内网服务

远程端口转发(Remote Forwarding)

远程端口转发用于将本地服务通过 SSH 隧道暴露到远程服务器上。这在需要将内网服务临时暴露到公网时非常有用。

基本语法

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

常用参数

参数含义说明
-R远程转发将远程服务器的端口转发到本地
-N不执行命令仅建立隧道,不打开远程 Shell
-f后台运行建立连接后转入后台
-o ServerAliveInterval=60心跳保活每 60 秒发送心跳包,防止连接断开

实战案例 1:将本地 Web 服务暴露到公网

场景:你在本地开发了一个 Web 应用(运行在 127.0.0.1:80),需要临时让外部用户访问。

ssh -R 8080:127.0.0.1:80 root@<YOUR_SERVER_IP> -N -f -o ServerAliveInterval=60

效果

验证

# 在公网服务器上测试
curl http://127.0.0.1:8080/api/ping

实战案例 2:内网设备端口映射

场景:你需要将内网中另一台设备(192.168.5.32)的 80 端口暴露到公网。

ssh -R 8080:192.168.5.32:80 root@<YOUR_SERVER_IP> -N -f -o ServerAliveInterval=30

注意192.168.5.32 必须是你本地网络中可访问的设备。

实战案例 3:MQTT 端口转发

场景:将本地 MQTT 服务(192.168.5.32:1883)映射到公网的 1884 端口。

ssh -R 1884:192.168.5.32:1883 root@<YOUR_SERVER_IP> -N -f -o ServerAliveInterval=30

停止隧道

由于隧道在后台运行,需要使用以下命令停止:

# 查找 SSH 进程
ps aux | grep ssh

# 杀掉进程(假设 PID 是 12345)
kill 12345

本地端口转发(Local Forwarding)

本地端口转发用于通过 SSH 隧道访问远程内网中的服务。这在需要访问公司内网资源时非常有用。

基本语法

ssh -L [本地端口]:[目标地址]:[目标端口] [用户名]@[跳板机]

常用参数

参数含义说明
-L本地转发将本地端口转发到远程目标
-N不执行命令仅建立隧道,不打开远程 Shell
-f后台运行建立连接后转入后台
-n重定向 stdin从 /dev/null 读取输入,防止后台进程读取键盘输入

实战案例:远程办公访问公司数据库

场景背景

目标:让你家里的电脑可以通过访问 127.0.0.1:3306 连到公司的数据库

执行命令

ssh -f -N -n -L 3306:10.0.0.5:3306 user@192.168.1.100

命令执行效果

  1. 输入密码:终端会提示你输入跳板机的密码(或者用密钥登录)
  2. 瞬间”消失”:登录成功后,因为加了 -f,命令行提示符立刻回来了,你感觉不到 SSH 还在运行
  3. 静默工作:因为加了 -N-n,它在后台不占屏幕,也不听你键盘乱敲
  4. 连接数据库
    • 你打开本地的 Navicat 或 DBeaver
    • 连接地址填 127.0.0.1,端口填 3306
    • 神奇的事情发生了:数据通过 SSH 隧道(A -> B -> C),安全地连上了公司的内网数据库

参数详解

参数含义作用为什么要用它?
-L本地转发定义转发规则:本地端口:目标IP:目标端口核心功能。把本地的流量”传送”到远程去。
-N不执行命令告诉 SSH 连上后不要打开远程的 Shell我们只是来修”隧道”的,不是来远程敲命令的。省资源且更安全。
-f后台运行连接建立后,把 SSH 进程放到后台运行,释放当前终端让你关掉终端窗口后,隧道还能继续跑,不占用你的屏幕。
-n重定向 stdin把标准输入重定向到空(/dev/null),不听键盘输入防止后台进程因为误读到你敲击键盘的字符而报错或卡死。

停止隧道

# 查找 SSH 进程
ps aux | grep ssh

# 杀掉进程
kill <PID>

两种模式的对比

特性远程转发 (-R)本地转发 (-L)
数据流向远程 → 本地本地 → 远程
典型场景将本地服务暴露到公网访问远程内网服务
常用参数-R -N -f -o ServerAliveInterval-L -N -f -n
安全注意暴露本地服务到公网有风险相对安全,仅访问远程服务

安全注意事项

  1. 密钥认证:生产环境应使用 SSH 密钥而非密码认证
  2. 访问控制:限制可连接隧道的 IP 地址
  3. 防火墙配置:确保防火墙允许必要的端口通信
  4. 及时关闭:使用完毕后及时关闭隧道,避免长期暴露
  5. 日志监控:定期检查 SSH 连接日志,发现异常及时处理

总结

SSH 隧道是一个功能强大的网络工具,通过远程转发和本地转发两种模式,可以灵活地解决各种网络访问问题:

掌握这些技术,可以大大提高运维工作的效率,同时保证数据传输的安全性。

参考资源


分享这篇文章到:

上一篇文章
关于贾的"屎尿屁"感想
下一篇文章
《逃离自由》- 现代人的自由困境