前言
最近由於項目需求,項目中需要實現一個WebSSH連接終端的功能,由於自己第一次做這類型功能,所以首先上了GitHub找了找有沒有現成的輪子可以拿來直接用,當時看到了很多這方面的項目,例如:GateOne、webssh、shellinabox等,這些項目都可以很好地實現webssh的功能,但是最終並沒有採用,原因是在於這些底層大都是python寫的,需要依賴很多文件,自己用的時候可以使用這種方案,快捷省事,但是做到項目中供用戶使用時,總不能要求用戶做到服務器中必須包含這些底層依賴,這顯然不太合理,所以我決定自己動手寫一個WebSSH的功能,並且作爲一個獨立的項目開源出來。
技術選型
由於webssh需要實時數據交互,所以會選用長連接的WebSocket,爲了開發的方便,框架選用SpringBoot,另外還自己瞭解了Java用戶連接ssh的jsch和實現前端shell頁面的xterm.js.
所以,最終的技術選型就是 SpringBoot+Websocket+jsch+xterm.js。
WebSSH的業務邏輯實現(核心)
剛纔我們實現了websocket的配置,都是一些死代碼,實現了接口再根據自身需求即可實現,現在我們將進行後端主要業務邏輯的實現,在實現這個邏輯之前,我們先來想想,WebSSH,我們主要想要呈現一個什麼效果。
我這裏做了一個總結:
1.首先我們得先連接上終端(初始化連接)
2.其次我們的服務端需要處理來自前端的消息(接收並處理前端消息)
3.我們需要將終端返回的消息回寫到前端(數據回寫前端)
4.關閉連接
效果展示
連接
連接成功
命令操作
ls命令vim編輯器top命令
結語
這樣我們就完成了一個webssh項目的實現,沒有依賴其它任何的組件,後端完全使用Java實現,由於用了SpringBoot,非常容易部署。
但是,我們還可以對這個項目進行擴展,比如新增上傳或下載文件,就像Xftp一樣,可以很方便地拖拽式上傳下載文件。
這個項目之後我會持續更新,上述功能也會慢慢實現,Github:https://github.com/NoCortY/WebSSH
來源:https://blog.csdn.net/NoCortY/article/details/104772431
推薦閱讀
分享基於 Spring Cloud +OAuth2 的權限管理系統
鏈家程序員刪公司9TB 數據 被判7年
工作10年後,再看String s = new String("xyz") 創建了幾個對象?
SpringBoot集成WebSocket,實現後臺向前端推送信息
SpringBoot 配置 ELK 環境
給代碼寫註釋時有哪些講究?
程序員該如何把 Windows 系統打造的跟 Mac 一樣牛逼?
基於 SpringBoot,來實現MySQL讀寫分離技術