当前位置: 首页 > 工具软件 > webssh > 使用案例 >

WebSSH在线编程 所需工具介绍

陆展
2023-12-01

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

 类似资料: