什么是 SSH 隧道?
SSH 隧道(也叫 SSH 端口转发)把另一个服务的流量穿过你的加密 SSH 连接发送。它让你能到达一个本来不可直接访问的服务——绑在服务器 localhost 上的数据库、防火墙后的网页界面、或在路上访问你的家庭网络——靠把它绕道走 SSH。有三种:本地(-L)、远程(-R)、动态(-D,一个 SOCKS 代理)。下面讲各自做什么、何时用。
本地转发(-L):在本地到达远程服务
最常见的一种。你把一个本地端口转发到服务器能到达的服务。经典例子:只监听服务器 localhost 的数据库。
ssh -L 8080:localhost:5432 user@server
# 现在你机器上的 localhost:8080 → 服务器上 :5432 的 Postgres 用它把本地数据库 GUI 连到一个没暴露到公网的远程数据库,或在你自己浏览器里打开远程管理面板。
远程转发(-R):暴露一个本地服务
反过来:你让服务器上的一个端口转发到你机器上的服务。适合让远程盒子(或队友)到达你本地跑的东西,比如开发服务器。
ssh -R 9000:localhost:3000 user@server
# 服务器的 :9000 → 你本地 :3000 的应用 动态转发(-D):一个 SOCKS 代理
这把 SSH 连接变成一个 SOCKS 代理,于是你能把浏览器流量绕道走服务器——适合到达服务器网络上的任何东西,或像在它上面一样上网。
ssh -D 1080 user@server
# 把浏览器的 SOCKS 代理指向 localhost:1080 手机上的 SSH 隧道——以及一个更简单的替代
端口转发主要是桌面工作流;移动 SSH 客户端聚焦终端,在手机上敲隧道参数很别扭。对最常见的目标——从手机到达一个私有服务——通常有比手动隧道更干净的答案:把那个服务的主机放进 Tailscale 网络、直接用它的私有地址到达。TermAI 内置 Tailscale,所以你不必转发端口,直接连那个私有盒子干活就行。见 Tailscale vs WireGuard。
关于安全的一点说明
隧道由 SSH 加密,这很好——但远程转发(-R)可能把本地服务暴露得比你想的更广,而 GatewayPorts 会把一个转发对整个网络打开。只转发你需要的、除非有意否则绑到 localhost、并且优先用私有网络(Tailscale)而非让转发一直开着。
常见问题
SSH 端口转发用来做什么?
到达一个不可直接访问的服务——服务器 localhost 上的数据库、内部网页界面、或你的家庭网络——靠把它隧道走 SSH。
-L 和 -R 有什么区别?-L(本地)把你机器上的端口转发到服务器能到达的服务。-R(远程)把服务器上的端口转发到你机器上的服务。-D 做一个 SOCKS 代理。
能从手机做 SSH 隧道吗?
有些客户端支持,但在手机上很繁琐。要到达私有服务,Tailscale(TermAI 内置)通常更简单——直接连私有地址,而非转发端口。
快速事实
- SSH 隧道 = 把另一个服务的流量绕道走你的 SSH 连接
- -L 本地:在本地端口到达远程服务
- -R 远程:在服务器上暴露一个本地服务
- -D 动态:穿过服务器的 SOCKS 代理
- 手机上:Tailscale(直接到达私有地址)通常比手动隧道简单
Free on iOS and Android. 5 AI requests/day on the free tier, plus unlimited SSH/SFTP and built-in Tailscale.