WebSSH在線編程 所需工具介紹

Xterm.js

Xterm是一個X Window System上的終端模擬器,用來提供多個獨立的SHELL輸入輸出。

簡單說:
xterm 是一個使用 TypeScript 編寫的前端終端組件,可以直接在瀏覽器中實現一個命令行終端應用。xterm是x窗口環境中對本地虛擬控制檯的一個實現。

再直白點 可以在html頁面下實現 終端(DOC命令行),並且發送WebSocket的指令給後臺。

Paramiko SSH

ssh是一個協議,OpenSSH是其中一個開源實現,paramiko是Python的一個庫,實現了SSHv2協議(底層使用cryptography)。

有了Paramiko以後,我們就可以在Python代碼中直接使用SSH協議對遠程服務器執行操作,而不是通過ssh命令對遠程服務器進行操作。
由於paramiko屬於第三方庫,所以需要使用如下命令先行安裝

pip3 install paramiko

組成

paramiko包含兩個核心組件:SSHClient和SFTPClient。

SSHClient的作用類似於Linux的ssh命令,是對SSH會話的封裝,該類封裝了傳輸(Transport),通道(Channel)及SFTPClient建立的方法(open_sftp),通常用於執行遠程命令。
SFTPClient的作用類似與Linux的sftp命令,是對SFTP客戶端的封裝,用以實現遠程文件操作,如文件上傳、下載、修改文件權限等操作。

Paramiko中的幾個基礎名詞:

1、Channel:是一種類Socket,一種安全的SSH傳輸通道;
2、Transport:是一種加密的會話,使用時會同步創建了一個加密的Tunnels(通道),這個Tunnels叫做Channel;
3、Session:是client與Server保持連接的對象,用connect()/start_client()/start_server()開始會話。

參考原址

DWebSocket

django實現websocket大致上有兩種方式,一種channels,一種是dwebsocket。channels依賴於redis,twisted等,相比之下使用dwebsocket要更爲方便一些

安裝

pip3 install dwebsocket

配置

INSTALLED_APPS = [
    .....
    .....
    'dwebsocket',
]
 
MIDDLEWARE_CLASSES = [
    ......
    ......
    'dwebsocket.middleware.WebSocketMiddleware'  # 爲所有的URL提供websocket,如果只是單獨的視圖需要可以不選
]
WEBSOCKET_ACCEPT_ALL=True   # 可以允許每一個單獨的視圖實用websockets

使用

from dwebsocket.decorators import accept_websocket,require_websocket

@accept_websocket
@require_websocket

accept_websocket-—可以接受websocket請求和普通http請求
require_websocket----只接受websocket請求,拒絕普通http請求

舉個例子

from django.shortcuts import render,HttpResponse

# Create your views here.
def login(request):
    return render(request,'login.html')

from dwebsocket.decorators import accept_websocket
@accept_websocket
def path(request):
    if request.is_websocket():
        print(1)
        request.websocket.send('下載完成'.encode('utf-8'))

dwebsocket的一些內置方法:

  • request.is_websocket():判斷請求是否是websocket方式,是返回true,否則返回false
  • request.websocket: 當請求爲websocket的時候,會在request中增加一個websocket屬性,
  • WebSocket.wait() 返回客戶端發送的一條消息,沒有收到消息則會導致阻塞
  • WebSocket.read() 和wait一樣可以接受返回的消息,只是這種是非阻塞的,沒有消息返回None
  • WebSocket.count_messages()返回消息的數量
  • WebSocket.has_messages()返回是否有新的消息過來
  • WebSocket.send(message)像客戶端發送消息,message爲byte類型

總結:Xterm獲取併發送連接終端和命令的消息,dwebsocket進行接收websocket的消息,通過paramiko進行發送和反饋結果。消息的結果反饋也是一樣,是個閉環。

案例及配置
WebSSH在線編程1
WebSSH在線編程2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章