Mosh 全名 Mobile Shell,是 MIT 推出的一個能夠替代 SSH 的遠程終端程序,適用於 GNU/Linux、FreeBSD、Solaris、Mac OS X 和 Android。它支持間斷性鏈接,容許漫遊,提供了本地回顯和用戶輸入的行編輯。node
它旨在提供典型的SSH交互,此外增長了:git
若是客戶端休眠隨後喚醒或者暫時斷網,Mosh會保持會話狀態。github
Mosh容許客戶端或者服務器「漫遊」、改變IP地址,與此同時保持鏈接。與SSH不一樣,在Wi-Fi網絡之間切換,或者從Wi-Fi切換到蜂窩數據或者有線鏈接,Mosh均可以保持鏈接。web
Mosh在後臺運行一個服務器預測模型,可以智能猜想每個鍵擊如何影響屏幕的顯示。當預測達到置信區間,它將在等待從服務器傳回確認的時候提早顯示。大多數時候,左右方向鍵能夠提早回顯。安全
因此,Mosh能夠用在延遲較大的鏈接。好比說蜂窩數據或者質量較差的Wi-Fi。與其餘協議在本地回顯模型方面不一樣的是,Mosh能夠很好的與全 屏程序協做,好比emacs、vi、alpine和irssi,自動從偶爾的預測錯誤中修復。在高延遲的鏈接中,Mosh用下劃線標註預測,當收到服務起 的確認後,便去掉下劃線。服務器
Mosh不支持X轉發或者是非互動性的SSH應用,包括端口轉發。網絡
其餘特性:測試
Mosh會調整幀率,避免在慢的鏈接中填滿發送隊列,因此「Control-C」經常使用來中止一個假死的進程。優化
在一段時間沒有收到服務器的相應時,Mosh會提醒用戶。操作系統
Mosh支持分包丟失劃分標誌的有損網絡。
Mosh在處理Unicode邊界狀況時好於SSH,自身存在終端模擬器,可是須要UTF-8的環境來運行。
Mosh藉助SSH來完成鏈接和用戶認證,它自己不包含高權限代碼。
得到Mosh
Mosh的主頁中有在各類平臺下如何安裝它的方法,以及從源代碼編譯安裝的方法。
須要注意的是mosh客戶端收到一個AES會話鑰匙做爲環境變量。若是你爲其它操做系統提供了接口,請確保一個執行中進程的環境變量不會被其它用戶讀取。咱們確認這在GNU/Linux,OS X以及FreeBSD是會發生的。
使用
mosh-client必須存在於用戶機器,mosh-serve安裝在遠程主機。
用戶執行
$ mosh [user@]host
若是mosh-client或者mosh-serve不在用戶路徑,mosh能夠經過--client=PATH和--server=PATH指定位置。更多的選項能夠在mosh(1)用戶手冊中查詢。
在Mosh主頁還有更多的例子以及FAQ。
它如何工做
Mosh經過SSH到user@host來確認鏈接,SSH將提示用戶輸入密碼,或者使用公鑰來登陸。
以此出發,mosh-server運行在服務器上,服務進程監聽一個UDP端口,而且將它的端口號和一個AES-128密鑰經過SSH發送回客戶端,SSH鏈接隨後關閉,接下來的終端會話經過UDP進行。
若是客戶端改變了IP地址,服務器將會在幾秒鐘的時間內將新的數據發往新的IP地址。
爲了功能實現,Mosh須要UDP數據報能夠在服務器和客戶端之間傳送,默認的端口號在60000和61000之間,用戶也能夠經過-p選項指定。
建議
編譯標誌:Mosh是一個安全敏感的代碼,當自動編譯成二進制程序包時,咱們建議在./configure中加上--enable-compile- warnings=error。在GNU/Linux中使用g++或者clang++編譯時,應該明確加上-Werror,若是它不存在,請通知咱們。
在可能的狀況下,Mosh經過各類二進制硬化標誌構建,好比-fstack-protector-all,-D_FORTIFY_SOURCE=2 等,這樣提供了主動的安全保護,避免在Mosh或者它引用的庫中存在的內存污染,若是想要得到完整的標誌列表,在configure.ac中搜索 HARDEN。configure腳本能夠檢測你的編譯器支持哪些標誌,而後自動開啓。若是想要禁用這個特性,將參數--disable- hardening傳遞給./configure。若是默認配置有問題,請通知咱們,咱們但願儘量多的用戶能夠獲得最安全的配置。
Mosh編譯的時候默認優化等級爲-O2,一些用戶詢問可否改爲-Os,咱們已經使用src/examples/benchmark來測試它,結果 代表在GNU/Linux的g++ 4.6環境下,-O2比-Os快40%,在Mac OS X的clang++ 3.1環境下,-O2快16%。因此,雖然-Os編譯後的程序小,但Mosh的CPU利用率不是特別高,用戶沒有輸入的時候甚至是掛起的,咱們以爲-O2 是更好的選擇。
更多的信息
Mosh主頁
http://mosh.mit.edu/
mosh-devel@mit.edu郵件列表
http://mailman.mit.edu/mailman/listinfo/mosh-devel
mosh-users@mit.edu郵件列表
http://mailman.mit.edu/mailman/listinfo/mosh-users
在Freenode IRC上的頻道
http://webchat.freenode.net/?channels=mosh