跳至主要內容
技術

Mosh 入門 — 把 SSH 帶到不穩網路上的 mobile shell

Mosh 入門 — 把 SSH 帶到不穩網路上的 mobile shell

背景

你有沒有遇過這種情況:在高鐵上 ssh 到公司機器跑東西,過個山洞訊號掉一下,整個 session 就死了。回到位子上得重新連、重新進 tmux、重新 cd 回剛剛的目錄。

或者更日常的:在咖啡店 Wi-Fi 連美西的 server,每按一個鍵都要等個半秒才看到字。寫個 vim 都覺得自己是在打電報。

這兩件事的根源是同一個 — SSH 是建在 TCP 上的:

  1. TCP 一斷就死 — IP 變了、封包丟太久、筆電 sleep,連線就不可挽回
  2. 每個按鍵都要等 RTT — 終端機要等 server 回顯,你才看得到自己打了什麼

Mosh 就是為了解決這兩個問題而生的。

什麼是 Mosh

Mosh = Mobile Shell,2012 年從 MIT CSAIL 出來的研究專案。它的設計哲學很乾脆:

SSH 負責登入認證,Mosh 接手互動 shell。

實際流程是:

1. mosh client 用 SSH 連到 server,照常做 key 認證
2. server 啟動 mosh-server,回傳一個 UDP port + 共享金鑰
3. SSH 結束,client 改用 UDP 跟 mosh-server 講話
4. 後續所有按鍵、畫面更新都走加密 UDP

重點:Mosh 不取代 SSH,是互動 shell 場景的延伸scprsync、port forwarding 那些事還是給 SSH 做。

三個殺手級功能

1. Local echo(本地回顯預測)

Mosh client 會「猜」你按的鍵會在螢幕上長什麼樣,有把握的就立刻顯示,沒把握的會加個底線等 server 確認。

USENIX 2012 論文的實測數字夠誇張:3G 環境下,SSH 的按鍵中位延遲 503ms,Mosh < 5ms。寫 vim、用 REPL、改 config 檔的體感差距是天和地。

2. Roaming(IP 切換不斷線)

Mosh server 把「最新一個有效封包的來源 IP」當成你的位址。所以你從咖啡店 Wi-Fi 走出去切到 LTE、回辦公室再換成有線網路 — session 完全不會斷,連 reconnect 動作都不用做。

對筆電帶著到處跑的人來說,這個功能等於再也不用煩惱「我等下要移動,先 disconnect 一下」。

3. 持久連線(sleep / 斷網都撐得住)

筆電闔上、進地下道、Wi-Fi 抖一下、咖啡店把你踢出網路 — Mosh 都不會把 session 砍掉。Client 端會在最上面顯示「多久沒收到 server 訊息」,網路一回來就自動接上。

基本操作

安裝(client 和 server 兩邊都要裝):

# macOS
brew install mosh

# Debian / Ubuntu
sudo apt install mosh

第一次連線,用法跟 SSH 一模一樣:

mosh user@host
# 也支援指定 ssh port、identity
mosh --ssh="ssh -p 2222 -i ~/.ssh/work" user@host

經典組合:搭配遠端 tmux,補上 Mosh 沒有 scrollback 的缺點:

# 連上去自動 attach 到 tmux session
mosh user@host -- tmux a -t main

這套組合是行動辦公的黃金搭檔 — Mosh 撐連線、tmux 撐 session 與歷史。

什麼時候該用 / 不該用

情境用 SSH用 Mosh
跨洲遠端 vim / tmux / REPL延遲爆炸本地回顯瞬間反應
筆電帶著到處跑、頻繁換網路切網路就斷session 不死
不穩 Wi-Fi、LTE hotspot 上開 shell一斷就重連自動接回去
scp / rsync / port forwarding✗(這些事還是用 SSH)
跳板機 / 沒裝 mosh-server 的雲端機✗(兩邊都要裝)
tail -f 看完整 log△(會跳過中間畫面)

已知限制(坑)

實際用之前要知道的事:

  1. 兩邊都要裝 mosh-server — 雲端機常缺、跳板機也常沒裝
  2. UDP 60000–61000 — 預設用的 UDP port range,企業 firewall / cloud security group 常常擋掉,要記得開
  3. 沒有 scrollback — Mosh 同步的是「目前可見的螢幕」,不是完整歷史。往上捲不回去 → 解法:遠端跑 tmux 或 screen
  4. 沒有 port forwarding / agent forwarding — 這個是 issue #120 的長期未解。要 SSH 隧道、要 agent 轉發,乖乖回去用 SSH
  5. 不負責檔案傳輸scpsftprsync、Git over SSH 都跟 Mosh 無關

簡單記:互動 shell 用 Mosh,其他通通用 SSH。

替代品與競品(2026 現況)

過去幾年陸續有人想做「Mosh 的後繼者」,但截至 2026 年 5 月,沒有任何一個真正取代它。簡單盤點:

工具路線2026 狀態能取代 Mosh 嗎?
trzsz/tssh + tsshdGo 寫的 OpenSSH 相容工具,UDP over QUIC / KCP最新 release 2026-05,最活躍◯ 補上 scrollback / port forwarding / agent forwarding,但刻意不做 local echo
Eternal Terminal (et)TCP-based session 持久化 + scrollbackv6.2.11(2024-07),bugfix commit 還在進△ 有 scrollback、有 reconnect,但 TCP-only,沒有 UDP roaming 體感
Blink ShelliOS / iPadOS 終端機 app持續更新✗ 它內建 Mosh 協定,是 Mosh 的最佳行動載體,不是替代品
SSH3學術派 QUIC-based SSH 重寫v0.1.7(2024-01),作者明說別上 production✗ 還在實驗階段
Tailscale SSH / Cloudflare SSH給 SSH 補上 zero-config 連線都在活躍開發✗ 解的是「怎麼連到 server」,不是「連上後體驗」
QUICSSH、zmx 等 2026 新工具QUIC native 或 tmux 替代品剛冒出來、community 還沒驗證△ 觀察名單

結論:2026 年的局面是分工,不是取代。

  • local echo + 不穩網路上順手打字 → 還是 Mosh
  • scrollback + port forwarding + 現代 OpenSSH config 相容 → 看 tssh + tsshd
  • 要解決「server 怎麼連得到」這層 → 看 Tailscale / Cloudflare Access

換句話說,Mosh 沒被取代不是因為它技術多神,是因為沒人願意實作 local echo prediction。這功能技術上不難,但對按鍵體感的影響太大,沒有它的工具就是「另一種 SSH 變種」。

那實際上大家在用什麼?

講完技術競品,回到現實 — 2026 年最主流的做法不是 Mosh,是無聊的 ssh + tmux

層次用法為什麼主流
真・最大宗ssh user@host + 遠端 tmux aserver 不用裝東西、所有雲端機都能用、防火牆不擋。會用 tmux 已經能撐 80% 場景。
進階個人開發者Mosh + 遠端 tmux願意為「按鍵不延遲」+「IP 切換不斷線」付兩邊都要裝、UDP 要開洞的代價。
現代團隊(爆發中)Tailscale SSH / Cloudflare Access不解 latency,解的是「怎麼連得到 + ACL 怎麼管」。近兩年新創幾乎全面換掉 VPN。

所以實際的選擇大概是:

  • 問「個人怎麼連 server」 → 大部分人還是 ssh + tmux,少部分死忠用 Mosh
  • 問「團隊怎麼管遠端 access」 → Tailscale SSH 或 Cloudflare Access 已經是 2026 主流
  • 問「最強的技術方案」tssh + tsshd,但安裝成本和 SSH 一樣高、認知成本更高,主流採用還沒起來

Mosh 在這個光譜上是一個明確的「進階個人選擇」 — 它不會是團隊的標配,但會是某些開發者的隨身工具。

反思

技術面

Mosh 1.4.0 停在 2022 年 10 月,到現在三年多沒出新 stable release。但 GitHub master 還是有人在 commit,最近一筆是 2026 年 3 月。

這不是 dead project,比較精準的描述是 active but slow-moving — 還活著,只是動得很慢。理由也很合理:Mosh 把「不穩網路上的互動 shell」這個窄題已經做完了,不太需要新功能。

心態面

我們常用 release 頻率來判斷一個開源專案的健康度,但 Mosh 提醒我們:有些工具就是「做完了」。把一個窄而清楚的問題解決到極致,就值得一直被用,不用每年硬擠新版本。

但「做完了」也意味著風險 — 上面競品盤點裡可以看到,tssh + tsshd 已經把 Mosh 沒做到的事(scrollback、port forwarding)補齊。哪一天有人補上 local echo prediction,Mosh 就會被換掉。在那之前,它的地位來自一個有點諷刺的事實:沒人想再寫一次按鍵預測

有趣發現

iOS 上最知名的 mobile terminal — Blink Shell — 整個就是建在 Mosh 上的。一個 2012 年的 MIT 研究專案,撐起了 2026 年 iPad 上的開發者體驗。

下次在高鐵上用 iPad 連回家裡 server 改 code,你用的其實還是這個十多年前的協定。

留言討論

esc
輸入關鍵字搜尋文章...
查看收藏 →