基於tornado的web ssh專案

2021-09-19 12:27:53 字數 1626 閱讀 5404

上次有幸**樑勝大牛的技術分享,其中乙個演示是瀏覽器中顯示了乙個linux終端並登入管理server,於是決定自己實現乙個

github中有乙個專案gateone實現了此功能,本來想學習一下,但是考慮到**實在過多就放棄了,下面說下自己的實現。

專案位址:[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**伺服器,只要她可以訪問的伺服器,你都可以通過瀏覽器連線登入而不用任何客戶端

下面是幾張演示圖稿:

基於tornado的WEB服務

搭建乙個微型的web服務,監聽8000埠,如有接收到客戶端的網頁請求,根據請求的路徑 返回 對應的資訊。監聽埠設定 命令列或是python指令碼內?如何設定 web.py程式執行時,必須監聽伺服器端口,以便向客戶提供服務。如果我們將埠,定義在指令碼 內部,那麼,如果想要改動監聽的埠,我們必須要修改指...

基於tornado的簡單socket通訊建立

這裡有比較全的介紹,寫得非常好。顯示效果如下 如下 import errno import functools from tornado ioloop import ioloop import socket import time import queue sock socket socket so...

基於tornado的http服務框架

安裝etornado 0.1.6版本,該版本基於python 3.6,所以 先用conda建立py36環境 conda create name py36 python 3.6 啟用該環境 conda activate py36 安裝etornado pip install etornado 0.1....