摘要:引言上次有幸觀看梁勝大牛的技術分享,其中一個演示是瀏覽器中顯示了一個終端并登錄管理,于是決定自己實現一個中有一個項目實現了此功能,本來想學習一下,但是考慮到代碼實在過多就放棄了,下面說下自己的實現。
引言
上次有幸觀看梁勝大牛的技術分享,其中一個演示是瀏覽器中顯示了一個linux終端并登錄管理server,于是決定自己實現一個
github中有一個項目gateone實現了此功能,本來想學習一下,但是考慮到代碼實在過多就放棄了,下面說下自己的實現。
項目地址:[webssh]: https://github.com/xsank/webssh
歡迎大家拍磚
終端展示
使用了github開源項目 term.js,這是個很贊的項目,因為在剛開始寫的時候你會發現linux返回的很多內容帶有特殊字符,需要窮舉處理,而這里正好有一個框架幫你做了這些復雜的操作
例如,linux 本身返回的字符是這樣子的:
所以你需要對于特殊字符格式化處理,才能正確顯示成linux終端的文本行
長連接
這里使用了websocket,因為類似top這樣的監控命令需要服務器定時推送
在這里,為了提高server端性能及效率,使用了epoll的ET模式,主要代碼如下:
def run(self): while True: epoll_list = self.select.poll() for fd, events in epoll_list: if select.EPOLLIN & events: while True: try: data = self.bridges[fd].shell.recv(1024) except socket.error, e: if e.errno == errno.EAGAIN: self.select.modify(fd, select.EPOLLET) elif isinstance(e, socket.timeout): break else: self.close(fd) try: self.futures[fd].send(data) except StopIteration: break elif select.EPOLLHUP & events: self.close(fd) else: continue
由epoll來管理所有websocket連接即事件處理
ssh登錄
使用第三方paramiko庫來支持server的加密登錄
總結來說,webssh相當于一個ssh代理服務器,只要她可以訪問的服務器,你都可以通過瀏覽器連接登錄而不用任何客戶端
下面是幾張演示圖稿:
如果使用上有任何問題,歡迎提給我:
Email:xsank#foxmail.com
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/45398.html
摘要:簡介是使用編寫的一個強大的可擴展的服務器。是一個編寫對請求響應的框架。作為程序員,你的工作是編寫響應特定條件請求的響應的。注意不能序列化一個列表,但是字典是可以的。 1.Tornado簡介 tornado是使用Python編寫的一個強大的、可擴展的Web服務器。它在處理嚴峻的網絡流量時表現得足夠強健,但卻在創建和編寫時有著足夠的輕量級,并能夠被用在大量的應用和工具中。 tornado的...
摘要:在被收購之后,維護并繼續發展。設置是告訴應用在目錄尋找應用模板。設置告訴應用使用目錄里面的類似圖像文件等靜態文件。我們會在應用開發過程中,保持著調試器在后臺運行。這能提供高效的開發環境。我們會把回應狀態設為已創建。 編者注:我們發現了有趣的系列文章《30天學習30種新技術》,正在翻譯,一天一篇更新,年終禮包。下面是第23天的內容。 今天的《30天學習30種新技術》,我決定暫時放下...
摘要:一虛擬機的安裝及配置首先在虛擬機里安裝這個是已經配置好了的文件以及它的使用說明鏈接密碼如果鏈接失效請聯系我更換注意一定要看文件使用說明文檔切記虛擬機的帳號密碼都在文檔里有寫地址要關閉虛擬機之后再更改二與虛擬機的連接下連接虛擬機的步驟關閉所有 一、虛擬機的安裝及配置 首先在虛擬機里安裝ubuntu這個是已經配置好了的ubuntu ova文件以及它的使用說明鏈接:https://pan....
閱讀 852·2023-04-25 21:21
閱讀 3233·2021-11-24 09:39
閱讀 3075·2021-09-02 15:41
閱讀 2004·2021-08-26 14:13
閱讀 1835·2019-08-30 11:18
閱讀 2781·2019-08-29 16:25
閱讀 513·2019-08-28 18:27
閱讀 1587·2019-08-28 18:17