很多有用的東西只監聽在伺服器自己的回送位址上——資料庫、開發伺服器、刻意不對外網開放的後台頁面。轉送把其中一個帶到手機上,走的是你本來就信任的那條 SSH 連線。
撰寫於
該用哪一個,取決於「哪一端負責綁定連接埠」,這也是唯一容易繞暈的地方。規則編輯器會隨著你輸入即時畫出方向,儲存前可以先對一眼:
local 127.0.0.1:LP ⇢ host ⇢ DEST:DP dynamic 127.0.0.1:LP = SOCKS5 ⇢ host ⇢ * remote host:LP ⇢ device ⇢ DEST:DP
長按主機 →「連接埠轉送」,再點 + 新增規則。選方向、填連接埠、打開開關。規則屬於這台主機、會一直留著;跑不跑是另一回事,用開關控制。
還有兩個入口,對應你會想起它的另外兩個時刻:設定 →「連接埠轉送」可以在完全沒開終端機的情況下管理所有主機的規則;而在工作階段裡,標題列的 ⇄ 小標籤會打開目前主機的同一份清單,帶即時 ↑/↓ 位元組計數,能直接看出到底有沒有流量。
「隨工作階段啟動」會在你每次連上這台主機的終端機時自動把規則拉起來。
轉送跑在它自己到主機的連線上,不依附於任何終端機分頁。所以:關掉啟動它的那個 shell,隧道照樣在;開兩個分頁也不會把它啟動兩遍;無論你開了多少工作階段,一條規則最多只跑一份。
轉送只在 Term 還在執行時存在。HarmonyOS 會暫停退到背景的應用——行程被凍結,而凍結的行程扛不起隧道。切到別的應用,轉送就停了。
有一個例外,但它比聽上去要窄。當你離開應用時如果還開著一個活著的 SSH 或 telnet 分頁,Term 會向系統申請一小段寬限時間——大約 70 秒——好讓你出去一下不至於把工作階段弄丟,順帶著的轉送也能撐過這段時間。這種寬限一天只有有限的幾次,電量低時還會更短。
一個終端機分頁都沒開的轉送,根本不在這份寬限的範圍內:只有存在活著的非 mosh 分頁時,這個申請才會發出。只開著 mosh 分頁也不算——mosh 本來就會自己重連,不需要它。所以,如果你希望隧道能熬過「去別的應用瞄一眼」,就順手留一個連著同一台主機的 SSH 分頁。
回到應用時,Term 會核對一遍自己的轉送,把已經斷掉的關掉,而不是給一條早就沒了的隧道亮著綠燈。把規則的開關再打開一次,它就會重連。
凡是你真需要它一直在的場景——一個長時間的傳輸、一個你正在用來上網的代理——就讓 Term 留在螢幕上。懸浮視窗和分割畫面都算「在螢幕上」,這也是一邊用別的應用、一邊讓隧道活著的實際辦法: 懸浮視窗 →
本機和動態轉送在手機上綁定的是 127.0.0.1,所以同網絡裡的其他裝置存取不到,只有本機上的應用能用。
刪除主機會連同它的規則一起刪掉。
轉送起不來時,錯誤裡會寫清是哪個連接埠、為什麼:常見的兩種是手機上這個連接埠已被佔用,或者伺服器不允許遠端綁定(`GatewayPorts`)。