WebSSH在线编程 所需工具介绍
Xterm.js
Xterm是一個(gè)X Window System上的終端模擬器,用來(lái)提供多個(gè)獨(dú)立的SHELL輸入輸出。
簡(jiǎn)單說:
xterm 是一個(gè)使用 TypeScript 編寫的前端終端組件,可以直接在瀏覽器中實(shí)現(xiàn)一個(gè)命令行終端應(yīng)用。xterm是x窗口環(huán)境中對(duì)本地虛擬控制臺(tái)的一個(gè)實(shí)現(xiàn)。
再直白點(diǎn) 可以在html頁(yè)面下實(shí)現(xiàn) 終端(DOC命令行),并且發(fā)送WebSocket的指令給后臺(tái)。
Paramiko SSH
ssh是一個(gè)協(xié)議,OpenSSH是其中一個(gè)開源實(shí)現(xiàn),paramiko是Python的一個(gè)庫(kù),實(shí)現(xiàn)了SSHv2協(xié)議(底層使用cryptography)。
有了Paramiko以后,我們就可以在Python代碼中直接使用SSH協(xié)議對(duì)遠(yuǎn)程服務(wù)器執(zhí)行操作,而不是通過ssh命令對(duì)遠(yuǎn)程服務(wù)器進(jìn)行操作。
由于paramiko屬于第三方庫(kù),所以需要使用如下命令先行安裝
組成
paramiko包含兩個(gè)核心組件:SSHClient和SFTPClient。
SSHClient的作用類似于Linux的ssh命令,是對(duì)SSH會(huì)話的封裝,該類封裝了傳輸(Transport),通道(Channel)及SFTPClient建立的方法(open_sftp),通常用于執(zhí)行遠(yuǎn)程命令。
SFTPClient的作用類似與Linux的sftp命令,是對(duì)SFTP客戶端的封裝,用以實(shí)現(xiàn)遠(yuǎn)程文件操作,如文件上傳、下載、修改文件權(quán)限等操作。
Paramiko中的幾個(gè)基礎(chǔ)名詞:
1、Channel:是一種類Socket,一種安全的SSH傳輸通道;
2、Transport:是一種加密的會(huì)話,使用時(shí)會(huì)同步創(chuàng)建了一個(gè)加密的Tunnels(通道),這個(gè)Tunnels叫做Channel;
3、Session:是client與Server保持連接的對(duì)象,用connect()/start_client()/start_server()開始會(huì)話。
參考原址
DWebSocket
django實(shí)現(xiàn)websocket大致上有兩種方式,一種channels,一種是dwebsocket。channels依賴于redis,twisted等,相比之下使用dwebsocket要更為方便一些
安裝
pip3 install dwebsocket配置
INSTALLED_APPS = [..........'dwebsocket', ]MIDDLEWARE_CLASSES = [............'dwebsocket.middleware.WebSocketMiddleware' # 為所有的URL提供websocket,如果只是單獨(dú)的視圖需要可以不選 ] WEBSOCKET_ACCEPT_ALL=True # 可以允許每一個(gè)單獨(dú)的視圖實(shí)用websockets使用
from dwebsocket.decorators import accept_websocket,require_websocket@accept_websocket @require_websocketaccept_websocket-—可以接受websocket請(qǐng)求和普通http請(qǐng)求
require_websocket----只接受websocket請(qǐng)求,拒絕普通http請(qǐng)求
舉個(gè)例子
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的一些內(nèi)置方法:
- request.is_websocket():判斷請(qǐng)求是否是websocket方式,是返回true,否則返回false
- request.websocket: 當(dāng)請(qǐng)求為websocket的時(shí)候,會(huì)在request中增加一個(gè)websocket屬性,
- WebSocket.wait() 返回客戶端發(fā)送的一條消息,沒有收到消息則會(huì)導(dǎo)致阻塞
- WebSocket.read() 和wait一樣可以接受返回的消息,只是這種是非阻塞的,沒有消息返回None
- WebSocket.count_messages()返回消息的數(shù)量
- WebSocket.has_messages()返回是否有新的消息過來(lái)
- WebSocket.send(message)像客戶端發(fā)送消息,message為byte類型
總結(jié):Xterm獲取并發(fā)送連接終端和命令的消息,dwebsocket進(jìn)行接收websocket的消息,通過paramiko進(jìn)行發(fā)送和反饋結(jié)果。消息的結(jié)果反饋也是一樣,是個(gè)閉環(huán)。
案例及配置
WebSSH在線編程1
WebSSH在線編程2
總結(jié)
以上是生活随笔為你收集整理的WebSSH在线编程 所需工具介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【UE4】使用Composure插件在场
- 下一篇: ps4仁王服务器不稳定,原来《仁王》放弃