Node-Web-Console——基於 Node.js 的網頁版 shell

逆葵發表於2019-02-16

Node-Web-Console(以下簡稱 NWC)是一個基於 Node.js 開發的網頁版 shell 應用,其想法來源於實驗室 SDN 相關專案的一次組會討論,需求大致是在網頁中嵌入 shell,然後實現從前端頁面展示的網路拓撲中直接進入虛擬機器節點進行簡單的管理。具體實現上則參考了 web-console,一個基於世界上最好的語言開發的專案。

先來一張介面的截圖:
圖片描述

從使用體驗來看,NWC 與真正的 shell 並無太大區別。當然,這要感謝 jquery.terminal 外掛作出的努力。而從實現原理層面來說,
NWC(以及 web-console)並不複雜,其底層通訊基於 HTTP 協議之上的 JSON-RPC 2.0 規範實現。JSON-RPC 是一個無狀態且輕量級的遠端過程呼叫(RPC)協議,對其不太瞭解的同學可以參見 JSON-RPC 2.0 Specification 或者 中文翻譯版。NWC 的後端 server 接收到使用者輸入的 command 後開啟子程式並執行之,然後將結果返回即可。

除此之外,NWC 還具有以下特性:

  • 易於配置。NWC 基於 Node.js 開發,安裝依賴 -> 啟動 server -> done!十分方便
  • 移動端友好。NWC 部署完畢後支援移動裝置訪問頁面並進行操作(當然,需要犧牲自動補全等功能),真正的隨時隨地可訪問自己的伺服器
  • 易於擴充套件。專案基於 Koa 開發並使用了儘可能少的中介軟體。你可以很方便地擴充套件或者將其整合到自己的專案中去
  • 安全係數高。NWC 使用前需要使用者登入,同時其頁面設定了標記,不允許搜尋引擎索引。你還可以給你的伺服器配置 HTTPS 來進一步提高安全係數

當然 NWC 目前還存在一些問題,比如不能執行 vi、ping 等需要等待使用者輸入或者無窮地執行一些操作的命令。這是因為目前版本的 NWC 底層通訊的 RPC 基於 HTTP,其特性決定了服務端只能被動響應客戶端的請求而無法主動多次推送結果。下一版的迭代中會嘗試用 websocket 替換 HTTP 來解決這一問題。

最後,專案地址在此:https://github.com/ChrisCindy…直接點我也行) 。歡迎使用,歡迎拍磚。

本文首發於我的部落格(點此檢視),歡迎關注。

相關文章