2012年5月23日

Mosh(mobile shell)取代 SSH 的遠端終端機連線工具

畫面來源:Mosh Project Site
Mosh 是終端機連線工具,它不是一種 Shell(如 bash、csh 等),而是一般熟知的 SSH / Telnet 有相同的作用 --- 連線到遠端的文字終端機。

但是 SSH 已經很管用,而且也跨平台,為什麼還需要 Mosh 呢?

Mosh 可以用來改善 SSH 的使用經驗,尤其是你需要透過無線網路、行動上網操作終端機時。相信經常使用 Linux、Mac OS X 的朋友,都會利用 SSH 連線到遠端的 Server / Workstation 工作,雖然文字終端機對頻寬的需求很低,但無線網路有延遲(latency)、斷線問題,會造成終端機在這種不堪使用。

例如筆者生活的南部(天龍國以南)地區,訊號經常只有 GPRS 或不到兩格的 3G,這種情況下使用 SSH 操作終端機真是痛苦無比,經常輸入一串指令後,過幾秒才斷斷續續得到回應。如果遇到斷線,那就更糟糕了,需要重新登入才能繼續。

雖然稍有經驗的 Linux/*nix 玩家都知道可以用 screen 指令來克服,讓工作狀態可以重新恢復到斷線前的樣子;不過,若一小時內重複斷線個幾次,或者網路長短不一的延遲情況嚴重,就會大幅影響工作效率。

如果你想多體驗這種想摔筆電的感覺,只要多搭幾次高鐵來回南北部,中途利用 SSH 遠端連線並用 VIM 完成幾支程式,就知道為什麼需要 Mosh。

在 Ubuntu Linux 12.04 LTS 版本安裝 Mosh,只需要一行指令:

sudo apt-get install mosh

基本的使用方式跟 SSH 類似:

mosh hostname

或(指定登入使用者)

mosh user@hostname

需要注意的是:Server 端也必須安裝 Mosh(連線建立時必須會在 Server 端自動執行 mosh-server)

以下是 Mosh 的官方介紹(中譯摘要)

切換IP仍保持連線 Change IP. Stay connected.
在不同的網路連線之間自動漫遊,例如在火車上使用 WiFi、旅館的區網或海灘的3G行動上網。Mosh 不像一般的網路程式會因為IP改變而斷線。

讓你有個舒服好眠 Makes for sweet dreams.
當你想睡覺的時候,儘管蓋上筆電的螢幕,讓它進入休眠狀態,雖然網路會因此斷線,但是當你重新打開螢幕,網路恢復連線後,原本的終端機可以自動恢復。

解決討厭的網路累格問題 Get rid of network lag.
原本的 SSH 輸入一段訊息後,必須等到伺服器回應才會顯示輸入的資料,但是對於延遲嚴重的網路,看不到即時的回應會使操作變得礙手礙腳,Mosh 可以立即顯示回應,即使是 VIM 或 Emacs 這種全螢幕的編輯器也能支援。

不需要特別的權限或常駐服務 No privileged code. No daemon.
你不需要有系統管理員權限就能執行 Mosh,直到你真正需要連線時 Mosh 才會被執行。

相同的登入方式 Same login method.
Mosh 不會監聽特別的連接埠或者驗證使用者,Mosh 的客戶端可以透過原有 SSH 機制登入到伺服器,帳號密碼及公鑰都是與 SSH 相同的驗證方式。登入後伺服器端會執行 mosh-server 來建立 UDP 連線。

在終端機中執行但效果更好 Runs inside your terminal, but better.
你可以用一般的 xterm、gnome-terminal 等終端機工具來執行 Mosh 程式,但是 Mosh 自行實現的底層的處理,因此諸如一些終端機可能會發生的 UTF-8 問題等,都可以得到解決。

Ctrl+C 正常作用 Control-C works great.
Mosh 使用 UDP 為基礎的協定,並且對封包遺失問題有好的處理,會根據網路條件調整頻率,由於 Mosh 不會將網路的緩衝區填滿,因此 Ctrl+C(中止程序)可以正常作用。

以上是官方說法,歡迎有興趣的朋友發表試用感言!

2 則留言:

lyhcode by lyhcode
歡迎轉載,請務必註明出處!