top of page
搜尋

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

作家相片: termius team
termius team
9月7日
讀畢需時 10 分鐘

远程服务器上有个数据库,只允许本机访问。测试环境的 Web 服务藏在内网里。你在咖啡店连 Wi-Fi,又想安全地访问公司内网面板。遇到这些情况,很多人第一反应是改防火墙、开公网端口、找运维加白名单。


其实,端口转发和 SSH 隧道往往能更快、更安全地解决问题。Termius 的好处是,它把原本要敲命令的 SSH 转发配置做成了图形界面。你配置一次,下次点一下就能连上。


如果你还没安装,建议从 Termius官网 或系统应用商店获取客户端;搜索 Termius下载 时也尽量认准官方来源,别随便装来路不明的包。


广角视角展示一台笔记本电脑连接到小型家用服务器。
端口转发的核心就是把一个入口接到另一个服务。

端口转发到底在解决什么问题


端口可以理解成一台机器上的“门牌号”。比如:


  • 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 中可以这样配置:


  1. 进入 Port Forwarding 或 Tunnels 相关页面

    有些版本会叫 Port Forwarding,有些会把隧道放在主机详情里。


  2. 新建一条规则

    选择 Local 或 Local Forwarding。


  3. 选择 SSH 主机

    选择你刚才能正常连接的服务器。


  4. 填本地监听地址和端口

    地址一般用 `127.0.0.1`。端口填 `15432`。

    如果 `15432` 被占用,换成 `15433`、`25432` 也可以。


  5. 填目标地址和端口

    目标地址填远程服务器视角能访问的地址。

    如果数据库就在这台服务器上,填 `127.0.0.1`。

    目标端口填 `5432`。


  6. 保存并启动

    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

```


然后访问一个只有远端网络能打开的内网页面,看看是否成功。


如果只想让浏览器走代理,可以用浏览器单独代理配置,别改全局系统代理。这样影响范围更小,也更好排查问题。


俯视视角展示一台平板电脑上的 SOCKS 隧道连接图。
动态隧道适合把浏览器流量交给 SSH 连接处理。

隧道功能为什么能提高日常效率


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` 或数据库命令行工具测试目标服务是否可达。


侧面视角展示一台笔记本电脑旁边的网络排查纸条。
遇到转发失败时,按 SSH、端口、目标地址、服务权限逐项检查。

常见问题


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 里建一条隧道。


 
 
 

留言


bottom of page