Termius端口转发与隧道功能全攻略:概念 设置与实战应用

远程服务器上有个数据库,只允许本机访问。测试环境的 Web 服务藏在内网里。你在咖啡店连 Wi-Fi,又想安全地访问公司内网面板。遇到这些情况,很多人第一反应是改防火墙、开公网端口、找运维加白名单。
其实,端口转发和 SSH 隧道往往能更快、更安全地解决问题。Termius 的好处是,它把原本要敲命令的 SSH 转发配置做成了图形界面。你配置一次,下次点一下就能连上。

端口转发到底在解决什么问题
端口可以理解成一台机器上的“门牌号”。比如:
SSH 常用 `22`
HTTP 常用 `80`
HTTPS 常用 `443`
MySQL 常用 `3306`
PostgreSQL 常用 `5432`
本地开发服务常用 `3000`、`5173`、`8080`
端口转发做的事很简单:把你访问的一个端口,转交给另一台机器上的另一个端口。
打个比方,你本地电脑访问 `127.0.0.1:15432`,Termius 通过 SSH 连接到服务器,再把请求送到服务器上的 `127.0.0.1:5432`。对数据库来说,请求像是从服务器本机发出的。对你来说,数据库就像开在自己电脑上一样。
常见端口转发大致分三类。
本地端口转发适合访问远程内网服务
本地端口转发也叫 Local Forwarding。它最常用。
典型场景是:
远程数据库只监听 `127.0.0.1`
内网管理后台不能直接公网访问
服务器后面还有 Redis、Elasticsearch、Grafana 等服务
你不想暴露服务端口到公网
命令行里大概是这样:
```bash
ssh -L 15432:127.0.0.1:5432 user@example-server
```
意思是,把本地 `15432` 转到远程服务器能访问的 `127.0.0.1:5432`。
之后你本地数据库工具连接:
```text
Host: 127.0.0.1
Port: 15432
```
就能访问远程 PostgreSQL。
远程端口转发适合把本地服务临时给远端访问
远程端口转发也叫 Remote Forwarding。方向和本地转发相反。
它把远程服务器上的某个端口,转到你本地电脑上的服务。
比如你本地跑了一个调试服务:
```text
127.0.0.1:3000
```
你希望远程服务器能访问它,可以做远程转发:
```bash
ssh -R 18080:127.0.0.1:3000 user@example-server
```
然后远程服务器访问 `127.0.0.1:18080`,就会打到你本地的 `3000`。
这个很适合:
临时让测试服务器调用你本地服务
调试回调、Webhook、内部接口
不想临时部署一版代码到远程环境
要注意一点,远程端口是否能被服务器外部访问,取决于 SSH 服务端配置,比如是否允许 `GatewayPorts`。大多数情况下,它默认只让远程服务器本机访问,这反而更安全。
动态端口转发适合做 SOCKS 代理
动态转发也叫 Dynamic Forwarding。它不像本地转发那样固定目标端口,而是在本地开一个 SOCKS 代理,比如 `127.0.0.1:1080`。
命令行大概是:
```bash
ssh -D 1080 user@example-server
```
浏览器或工具把代理设成 SOCKS5 `127.0.0.1:1080` 后,请求会通过 SSH 隧道走到远程服务器再出去。
适合这些情况:
访问只能从远程服务器所在网络打开的内部网页
在不可信网络中临时加密一部分流量
测试“从某台服务器视角访问外部服务”的结果
别把它当成万能 VPN。它通常只影响你配置了代理的应用,不会自动接管系统所有流量。

在 Termius 中设置端口转发的完整流程
Termius 的界面在不同系统和版本里会有些小差异,但思路基本一样:先建主机,再建端口转发规则,然后启动连接。
下面按常见流程走一遍。
先准备 SSH 主机连接
打开 Termius 后,先添加或确认你已经有一个可用的 Host。
通常需要填这些信息:
地址 服务器 IP 或域名,比如 `example.com`
端口 默认是 `22`,如果服务器 SSH 改过端口,就填对应端口
用户名 比如 `root`、`ubuntu`、`deployer`
认证方式 可以是密码,也可以是 SSH 私钥。生产环境更建议用密钥
分组和标签 不是必须,但服务器多了以后很有用
先正常连一次 SSH。能打开终端,说明这条主机连接没问题。端口转发只是建立在这条 SSH 连接之上。
创建本地端口转发
以“从本地访问远程 PostgreSQL”为例。
目标是:
```text
本地电脑 127.0.0.1:15432
转到远程服务器 127.0.0.1:5432
```
在 Termius 中可以这样配置:
进入 Port Forwarding 或 Tunnels 相关页面
有些版本会叫 Port Forwarding,有些会把隧道放在主机详情里。
新建一条规则
选择 Local 或 Local Forwarding。
选择 SSH 主机
选择你刚才能正常连接的服务器。
填本地监听地址和端口
地址一般用 `127.0.0.1`。端口填 `15432`。
如果 `15432` 被占用,换成 `15433`、`25432` 也可以。
填目标地址和端口
目标地址填远程服务器视角能访问的地址。
如果数据库就在这台服务器上,填 `127.0.0.1`。
目标端口填 `5432`。
保存并启动
Termius 会通过 SSH 建立转发。启动成功后,本地就会出现一个可访问的端口。
配置完成后,在本地数据库工具里连接:
```text
主机 127.0.0.1
端口 15432
用户名 数据库用户名
密码 数据库密码
```
这里的数据库用户名和 SSH 用户名不是一回事。SSH 负责打通隧道,数据库仍然用数据库自己的账号密码。
创建远程端口转发
远程转发的例子更适合开发调试。
假设你本地起了一个 Node 服务:
```text
127.0.0.1:3000
```
希望远程测试服务器访问:
```text
127.0.0.1:18080
```
在 Termius 里新建规则时选择 Remote,然后填:
远程监听地址 通常用 `127.0.0.1`
远程监听端口 比如 `18080`
本地目标地址 `127.0.0.1`
本地目标端口 `3000`
启动后,登录远程服务器测试:
```bash
curl http://127.0.0.1:18080
```
如果返回了你本地服务的内容,就说明转发成功。
创建动态 SOCKS 隧道
动态转发适合让浏览器或开发工具通过 SSH 出口访问网络。
在 Termius 中新建规则,选择 Dynamic。常见配置是:
本地监听地址 `127.0.0.1`
本地端口 `1080`
SSH 主机 选择作为出口的服务器
启动后,在浏览器、API 工具或系统代理里配置 SOCKS5:
```text
SOCKS Host: 127.0.0.1
Port: 1080
```
然后访问一个只有远端网络能打开的内网页面,看看是否成功。
如果只想让浏览器走代理,可以用浏览器单独代理配置,别改全局系统代理。这样影响范围更小,也更好排查问题。

隧道功能为什么能提高日常效率
Termius 的隧道功能不只是“少敲几行命令”。它真正省时间的地方在重复使用和减少误操作。
配置一次,下次直接启动
如果你用命令行,每次都要记:
```bash
ssh -L 15432:127.0.0.1:5432 user@example-server
```
服务器一多、端口一多,很容易搞混。
Termius 可以把转发规则保存起来。比如你可以命名为:
```text
prod-postgres-readonly
staging-redis
dev-socks-proxy
local-api-to-test-server
```
下次要用时,找到规则点启动就行。对需要频繁切换项目的人来说,这个差别很明显。
多设备同步更省心
很多人会在笔记本、平板、手机之间切换。Termius 的核心优势之一就是跨设备管理 SSH 连接和配置。你不用在每台设备上重新记服务器地址、密钥路径和端口规则。
当然,涉及密钥和服务器权限时,还是要开好设备锁、应用锁和账户保护。方便不能替代安全。
UI 能帮你减少低级错误
端口转发的问题经常出在这几个地方:
把本地端口和远程端口填反了
本地端口已经被占用
目标地址从远程服务器看不可达
数据库只允许本机监听,却填了内网 IP
SSH 连上了,但数据库账号不对
图形界面虽然不能自动解决所有问题,但它会把配置拆成几个清晰字段。你一眼能看出“监听在哪里”和“转发到哪里”。
比开放公网端口更安全
为了临时访问数据库,有人会直接在云安全组或防火墙里开放 `3306`、`5432`。这很危险。数据库一旦暴露到公网,就会面对大量扫描和暴力尝试。
SSH 隧道的思路更稳:
数据库继续只监听内网或本机
公网只开放 SSH
SSH 使用密钥登录
需要访问时才启动隧道
不用时关闭隧道
这不是说 SSH 就绝对安全。你仍然要禁用弱密码、限制登录用户、定期更新系统。但相对直接暴露业务端口,它通常更容易管控。
四个实战案例让配置更好懂
下面几个例子都很常见。你可以直接照着改地址和端口。
案例一,安全连接生产数据库做只读查询
场景是这样的:生产 PostgreSQL 只监听服务器本机 `127.0.0.1:5432`,开发者需要偶尔查只读数据。
Termius 配置:
```text
类型 Local
SSH 主机 prod-server
本地地址 127.0.0.1
本地端口 15432
目标地址 127.0.0.1
目标端口 5432
```
本地数据库工具连接:
```text
Host 127.0.0.1
Port 15432
Database app_prod
User readonly_user
```
效率提升很直接。你不需要让数据库开公网端口,也不需要每次登录服务器再执行 `psql`。图形化数据库工具还能保存查询、导出小范围结果、查看表结构。
靠谱做法是给数据库单独建只读账号,不要用应用的高权限账号。
案例二,访问云服务器内网里的 Redis
Redis 常常不该暴露到公网。如果它跑在应用服务器本机,或只允许内网访问,本地工具就连不上。
Termius 本地转发可以这样配:
```text
类型 Local
本地地址 127.0.0.1
本地端口 16379
目标地址 127.0.0.1
目标端口 6379
```
本地 Redis 客户端连接:
```text
127.0.0.1:16379
```
这对排查缓存键、查看过期时间、确认队列数据很有用。做完记得关掉隧道,别让本地工具一直挂着生产环境。
案例三,把本地开发服务给测试服务器调用
你在本地改了一个支付回调接口,测试服务器需要调用它。但代码还没部署,公网也不能直接访问你的电脑。
可以用远程端口转发:
```text
类型 Remote
远程地址 127.0.0.1
远程端口 18080
本地目标地址 127.0.0.1
本地目标端口 3000
```
然后在测试服务器上把回调地址临时改成:
```text
http://127.0.0.1:18080/callback
```
这样测试服务器发出的请求会穿过 SSH 隧道,打到你本地的开发服务。
这个方式很适合调试,但不要把它长期当生产方案。你的笔记本断网、休眠、关机,隧道都会断。
案例四,用动态隧道访问内网管理页面
假设你有一台跳板机能访问内网管理页:
```text
http://internal-panel.local
```
你的本地电脑直接打不开。可以在 Termius 里建动态隧道:
```text
类型 Dynamic
本地地址 127.0.0.1
本地端口 1080
SSH 主机 bastion-server
```
浏览器配置 SOCKS5:
```text
127.0.0.1:1080
```
之后浏览器访问 `internal-panel.local`,请求就会通过跳板机过去。
如果域名解析也需要走代理,浏览器或代理插件里要打开“通过代理解析 DNS”之类的选项。否则可能出现 IP 能通、域名打不开的情况。
排查问题时先看这几处
端口转发连不上,不要急着删配置重来。按下面顺序查,通常很快能定位。
SSH 连接是否正常
先用 Termius 直接连服务器。如果 SSH 都连不上,端口转发肯定不会成功。
检查:
服务器地址是否写错
SSH 端口是否正确
密钥或密码是否有效
云安全组是否允许 SSH 入站
本地网络是否拦截了 SSH
本地端口是否被占用
如果你选择的本地端口已经被其他程序占用,隧道启动会失败,或启动后不是你想要的服务。
可以换一个不常用端口,比如:
```text
15432
13306
16379
18080
11080
```
端口不一定要和目标服务端口相同。只要你本地连接时填对即可。
目标地址要从 SSH 服务器视角看
这是最容易搞错的一点。
在本地转发里,目标地址不是从你电脑视角看,而是从远程 SSH 服务器视角看。
比如数据库在同一台服务器上,就填:
```text
127.0.0.1
```
如果数据库在另一台内网机器上,可能要填:
```text
10.0.1.25
```
前提是 SSH 服务器能访问这个内网地址。
服务本身是否允许连接
隧道通了,不代表数据库或 Web 服务一定允许你访问。
还要看:
数据库账号密码是否正确
服务是否监听在目标端口
防火墙是否允许 SSH 服务器访问目标服务
应用是否限制来源地址
TLS 或证书配置是否匹配
排查时可以先登录远程服务器,用 `curl`、`nc`、`telnet` 或数据库命令行工具测试目标服务是否可达。

常见问题
Termius 的端口转发和普通 SSH 命令有什么区别?
底层思路一样,都是 SSH 隧道。区别在于 Termius 把配置保存成可点击的规则,不用每次手动输入 `ssh -L`、`ssh -R` 或 `ssh -D` 命令。
本地端口一定要和远程端口一样吗?
不用。比如远程 PostgreSQL 是 `5432`,本地可以用 `15432`。只要本地客户端连接 `127.0.0.1:15432`,Termius 会把流量转到远程 `5432`。
为什么隧道启动了,但应用还是连不上?
常见原因有三个:目标地址填错、本地端口被占用、目标服务本身拒绝连接。记住,本地转发里的目标地址要从 SSH 服务器的角度判断。
动态隧道能替代 VPN 吗?
多数情况下不能完全替代。动态隧道通常是 SOCKS 代理,只影响配置了代理的应用。VPN 往往会接管更大范围的网络流量。临时访问内网网页时,动态隧道很方便。
使用端口转发安全吗?
合理使用会更安全,尤其是避免把数据库、Redis、后台面板直接暴露到公网。但安全还取决于 SSH 配置、密钥管理、服务器权限和本地设备保护。
端口转发听起来像高级技巧,其实核心就一句话:把你本地或远程的某个端口,通过 SSH 安全地接到另一个服务上。Termius 把这件事做得更容易保存、更容易复用,也更不容易输错命令。
如果你刚开始用,建议先从本地端口转发练手。拿一个测试数据库或内网 Web 服务做实验,确认 `本地端口`、`SSH 主机`、`目标地址`、`目标端口`之间的关系。等这个逻辑顺了,再用远程转发和动态隧道处理更复杂的调试场景。
用得好的话,它能少开很多公网端口,少写很多重复命令,也少一次次找人改网络配置。下次你发现“服务明明在服务器上能访问,本地就是打不开”,先别急着改防火墙,试试在 Termius 里建一条隧道。



留言