什麼是 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.