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