SSH 隧道:绕过防火墙访问远程内网服务

按图索骥 3 分钟阅读 更新于 2026-05-19

日常工作中常遇到这样的场景:能通过 SSH 连接远程服务器,但服务器防火墙只开放了 22 端口。此时若想访问远程服务器上的其他服务(如监听 8080 端口的 Web 应用),SSH 本地端口转发-L)是首选方案。

一、原理

SSH 本地端口转发的核心是隧道:建立 SSH 连接后,在本地开启一个端口,该端口的流量通过 SSH 隧道转发到远程服务器的指定地址。

1
本地 127.0.0.1:本地端口 → SSH 隧道 → 远程 127.0.0.1:远程端口

由于所有流量都走 SSH 连接的 22 端口,防火墙只需放行 22 入站流量,无需开放其他端口。

二、基本用法

1
ssh -L 本地端口:目标地址:目标端口 用户名@远程IP

示例:远程服务器 IP 1.2.3.4,目标服务 127.0.0.1:8080,本地用 8080 端口访问:

1
ssh -L 8080:127.0.0.1:8080 root@1.2.3.4

保持终端连接,在浏览器访问 http://127.0.0.1:8080 即可。Windows 10/11 自带 OpenSSH,CMD 和 PowerShell 中用法相同。

三、常用场景

3.1 远程服务监听内网 IP

远程服务监听 192.168.1.100:8080(非 127.0.0.1):

1
ssh -L 8080:192.168.1.100:8080 root@1.2.3.4

3.2 后台静默运行

添加 -fN 参数,无需保持终端开启:

1
ssh -fN -L 8080:127.0.0.1:8080 root@1.2.3.4
  • -f:后台运行
  • -N:只建立隧道,不登录 shell

关闭后台隧道:

1
2
ps aux | grep ssh
kill <进程ID>

3.3 允许同局域网其他人访问

默认只允许本机访问。添加 0.0.0.0 监听地址,可让同局域网其他设备通过本机 IP 访问:

1
ssh -L 0.0.0.0:8080:127.0.0.1:8080 root@1.2.3.4

四、总结

SSH 本地端口转发只需一条 -L 命令,利用已建立的 SSH 连接访问远程任意内网端口(8080、3306、Redis 等均适用),无需修改防火墙规则,无需开放新端口。

标签: linux xops

如果这篇文章对您有帮助,欢迎打赏支持