MoSH - 移動設備上的Shell

openkk 12年前發布 | 12K 次閱讀 Shell

Mobile Shell,或簡稱為MoSH,在 GitHub 上發布,是移動設備上 SSH 的替代品。闡釋 MoSh 背后的原則的技術論文將在下月召開的2012 USENIX 年度技術會議上發布。

下述兩個重要特性是 MoSH 有別于其它類似產品的:

  • 第一,連接的 IP 地址不可知;而不是采用 TCP/IP 連接,數據通過 UDP/IP 發送。好處是,如果移動設備無信號或設備的 IP 地址改變(因為移動設備可以在 WiFi 網絡和蜂窩網絡間漫游),那么在傳輸層保持有狀態連接就不那么可靠。
  • 第二,MoSH 沒有在客戶端與服務器之間提供一個透明的加密字節流,讓服務器通過重繪屏幕來響應的機制;MoSH 客戶端提供了一個本地 echo 的變體。這意味著,當用戶通過鍵盤輸入了一個‘X’,MoSH 不會通過客戶端將‘X’發送給服務器,再由服務器傳輸回客戶端在屏幕上顯示這種方式,而是立即在客戶端屏幕上顯示‘X’。

這兩個改變顯然與層次架構的連接流,如 SSH,區別明顯;SSH 提供了只在兩個端點之間的加密字節流,然后要遠程服務器程序重繪屏幕。因為 SSH 完全不知道連接各個端點如何使用數據,任何擊鍵都至少要在客戶端與服務器間往返一次才能顯示。

MoSH 在服務器創建一個進程,運行于用戶空間,監聽 UDP 包。然后將服務器地址(和 UDP 端口)告知 MoSH 客戶端,并通過以數據包的形式發送數據來初始化連接。然而,因為連接本身在網絡層是無狀態的,如果客戶端 IP 地址發生變化,則 UDP 包可以來自一個不同的 IP 地址(發送給同一服務器)而不會失去連接。

采用 UDP,而非 TCP,同樣意味著 MoSH 客戶端/服務器需要各自管理狀態。連接中的每一個數據包都有一個自增長的數字,同時客戶端和服務器都建立一個已知數據包的列表,當需要的時候 MoSH 庫會重新發送數據包。(這基本上就是 TCP 原理的精髓。)也因為如此 MoSH 客戶端可以在不同的 IP 地址或(將來)在 IPv4 與 IPv6 之間切換。服務器端的 IP 地址必須保持不變。

通過 MoSH 連接發送的數據包采用 AES-128 OCB 模式加密。該加密算法提供了采用固定密鑰的加密端點,密鑰在服務器啟動時生成,并在連接信息中顯示:

$ mosh-server MOSH CONNECT 60004 4NeCCgvZFe2RnPgrcU1PQw…

雖是新方法,但 AES-128 OCB 已經出現了一段時間,并且該算法作者指出他們正在邀請更進一步的審查

你們的安全數據報協議已經通過專家審核了嗎?

還沒有。MoSH 開始被越來越多的使用,并且代碼被有強烈安全意識的加密極客閱讀過,他們認為 MoSH 的設計是合理的,但是任何新的數據報協議都要自我證明其安全性,SSP 也不例外。我們使用了 AES-128和 OCB 的參考實現,同時我們也歡迎人們來審閱代碼。我們認為設計的簡單性是個顯著的優勢,然而,當然別人也可能認為這是錯誤的。我們毫不懷疑需要花些時間(這是當然的!)才能讓安全社區對 MoSH 的安全性感到滿意。

另一個重大改變是在客戶端與服務器進程間同步屏幕狀態。絕大多數時候,當用戶輸入一個字符后(比如字符‘X’),希望看到X顯示在屏幕上;并且當他們按下退格鍵,用戶希望字符被立即刪除。對于上/下/左/右鍵來說也類似,通常要移動一個字符。

為了達到這個目標,MoSH 服務器存儲了一個客戶端的模擬屏幕(反之亦然),并基于在“正常”情況下按鍵是否會改變屏幕顯示來預測。如果預測失效,MoSH 客戶端將會等待與服務器間往返的時間以確認屏幕顯示狀態(本質上說是減少老的 SSH 機制),但如果 MoSH 確信擊鍵會引發屏幕更新,那么 MoSH 將會直接在本地顯示。在類 shell 環境中(大部分擊鍵都要回顯),這將會減少服務器端引起的感知延遲,另外也可減少網絡發送的傳輸量,因為擊鍵可以批量發送,而非像大多數交互式連接那樣每次按鍵發送一個數據包。

一個限制是輸入只支持 UTF-8,因為多次按鍵可以轉化為單一字符(反之亦然)。MoSH 不是要試圖解決所有的編碼和輸入法的問題,而只專注于 UTF-8并保證其工作正常。更多細節可參考技術信息頁面。

MoSH 帶來了一種在移動設備和服務器間連接的新方法。每個客戶端連接使用一個單獨的 UDP 端口(UDP 必須在兩個端點間可達),然而通道是用私鑰加密。因為連接可以轉換到其它 IP 地址上,自然會引發對于連接可能被侵入的擔憂,并且事實上“連接”在客戶端斷開后仍可保持對一些人來說也值得擔心。

然而,它的優勢,特別是提高了響應時間的感知,可能激發人們關注這個系統。同時因為兩邊的進程都是用戶進程,MoSH 可以很容易的安裝在已有的環境中,而無需提升權限進行安裝。

查看英文原文:MoSH - The Mobile Shell

來自: InfoQ
 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!