1.本发明涉及计算机技术领域,更具体地,涉及一种数据传输方法、装置、电子设备及存储介质。
背景技术:
2.wts(web terminal shell,基于网页的终端控制台)是平台中主机运维的常用功能,能够在web(网页)端与远端主机分别建立虚拟term(终端),通过虚拟term的交互在远端主机上执行web端输入的执行命令,再将远端主机的执行结果回写到web端,从而高效管理远端主机。
3.wts中存在大量、实时的网络数据交换,而目前常采用多线程、单函数同步模式实现wts,对主机资源占用高、资源利用率低,同时难以对抗网络波动,易发生数据丢失,影响工作效率。
技术实现要素:
4.本发明提供了一种数据传输方法、装置、电子设备及存储介质,以解决在实现wts功能的过程中对主机资源占用高、资源利用率低,难以应对网络波动,易发生数据丢失,影响工作效率的问题。
5.本发明第一方面提供了一种数据传输方法,该方法应用于服务端,该服务端与客户端通过网页套接字协议通道连接,该方法可以包括:
6.获取连接标识,所述连接标识用于指示所述客户端与主机;
7.根据所述连接标识在存储中获取预先存入的安全外壳协议通道,所述安全外壳协议通道用于连接所述主机,且与所述连接标识对应;
8.通过异步方式从所述网页套接字协议通道获取所述客户端发送的命令,并通过异步方式将所述命令从所述安全外壳协议通道向所述主机发送;
9.通过异步方式从所述安全外壳协议通道中获取所述主机针对所述命令的执行结果,并通过异步方式从所述网页套接字协议通道将所述执行结果向所述客户端发送。
10.可选地,所述获取连接标识之前,还包括:
11.获取所述客户端发送的主机信息以及客户端信息;
12.根据所述主机信息建立所述安全外壳协议通道,并根据所述主机信息与所述客户端信息生成所述连接标识;
13.将所述安全外壳协议通道与所述连接标识对应存入所述存储;
14.建立连接所述客户端的网页套接字协议通道。
15.可选地,所述根据所述连接标识在存储中获取预先存入的安全外壳协议通道,包括:
16.根据所述连接标识在存储中确定预先存入的安全外壳协议通道,以及所述安全外壳协议通道的存储时间;
17.在所述存储时间小于过期时间的情况下,返回所述安全外壳协议通道;
18.在所述存储时间大于或等于所述过期时间的情况下,返回空值。
19.可选地,所述通过异步方式从所述网页套接字协议通道获取所述客户端发送的命令之后,还包括:
20.在所述命令指示暂停访问的情况下,断开所述网页套接字协议通道,不断开所述安全外壳协议通道。
21.可选地,所述通过异步方式将所述命令从所述安全外壳协议通道向所述主机发送,包括:
22.获取命令黑名单,并对所述命令与所述命令黑名单进行匹配;
23.在匹配失败的情况下,通过异步方式将所述命令从所述安全外壳协议通道向所述主机发送;
24.在匹配成功的情况下,拦截所述命令,并从所述网页套接字协议通道向所述客户端发送拦截提示。
25.可选地,所述根据所述连接标识在存储中获取预先存入的安全外壳协议通道之后,还包括:
26.对所述网页套接字协议通道、所述安全外壳协议通道中的至少一个进行周期性的状态检测;
27.在所述网页套接字协议通道、所述安全外壳协议通道中的至少一个发生状态异常的情况下,断开所述网页套接字协议通道以及所述安全外壳协议通道。
28.可选地,所述通过异步方式从所述网页套接字协议通道获取所述客户端发送的命令之后,还包括:
29.将所述命令存储到检索数据库中。
30.本发明第二方面提供了一种数据传输装置,该装置应用于服务端,该服务端与客户端通过网页套接字协议通道连接,该装置可以包括:
31.标识获取模块,用于获取连接标识,所述连接标识用于指示所述客户端与主机;
32.通道获取模块,用于根据所述连接标识在存储中获取预先存入的安全外壳协议通道,所述安全外壳协议通道用于连接所述主机,且与所述连接标识对应;
33.命令传输模块,用于通过异步方式从所述网页套接字协议通道获取所述客户端发送的命令,并通过异步方式将所述命令从所述安全外壳协议通道向所述主机发送;
34.结果传输模块,用于通过异步方式从所述安全外壳协议通道中获取所述主机针对所述命令的执行结果,并通过异步方式从所述网页套接字协议通道将所述执行结果向所述客户端发送。
35.可选地,所述装置还包括:
36.信息获取模块,用于获取所述客户端发送的主机信息以及客户端信息;
37.通道建立模块,用于根据所述主机信息建立所述安全外壳协议通道,并根据所述主机信息与所述客户端信息生成所述连接标识;
38.通道存储模块,用于将所述安全外壳协议通道与所述连接标识对应存入所述存储;
39.所述通道建立模块,还用于建立连接所述客户端的网页套接字协议通道。
40.可选地,所述通道获取模块,包括:
41.通道查询子模块,用于根据所述连接标识在存储中确定预先存入的安全外壳协议通道,以及所述安全外壳协议通道的存储时间;
42.查询返回子模块,用于在所述存储时间小于过期时间的情况下,返回所述安全外壳协议通道;
43.所述查询子模块,还用于在所述存储时间大于或等于所述过期时间的情况下,返回空值。
44.可选地,所述装置还包括:
45.通道断开模块,用于在所述命令指示暂停访问的情况下,断开所述网页套接字协议通道,不断开所述安全外壳协议通道。
46.可选地,所述命令传输模块,包括:
47.黑名单匹配子模块,用于获取命令黑名单,并对所述命令与所述命令黑名单进行匹配;
48.命令传输子模块,用于在匹配失败的情况下,通过异步方式将所述命令从所述安全外壳协议通道向所述主机发送;
49.命令拦截子模块,用于在匹配成功的情况下,拦截所述命令,并从所述网页套接字协议通道向所述客户端发送拦截提示。
50.可选地,所述装置还包括:
51.命令存储模块,用于将所述命令存储到检索数据库中。
52.本发明第三方面提供了一种电子设备,该电子设备包括:接口,总线,存储器与处理器,所述接口、存储器与处理器通过所述总线相连接,所述存储器用于存储可执行程序,所述处理器被配置为运行所述可执行程序实现如第一方面所述的数据传输方法的步骤。
53.本发明第四方面提供了一种计算机存储介质,该计算机可读存储介质上存储可执行程序,所述可执行程序被处理器运行实现如第一方面所述的数据传输方法的步骤。
54.与相关技术相比,本发明具有以下优点:
55.在本发明实施中提供一种数据传输方法,该方法可以用于服务端,服务端与客户端通过网页套接字协议通道连接,可以根据指示服务端与客户端的连接标识获取预先存入的安全外壳协议通道,服务端通过安全外壳协议通道连接主机,此时,服务端可以从通道中获取客户端的命令向服务端发送,获取服务端对命令的执行结果向客户端发送,且均通过异步方式实现。在本发明实施中通过异步方式实现数据传输,能够适应高并发处理请求,有效提高主机资源利用率,同时对安全外壳协议通道进行存储,能够在网络波动导致通道断开时复用,无需重新建立通道,能够有效对抗网络波动,避免数据丢失,提高工作效率。
56.上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
57.通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明
的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
58.图1是本发明实施例提供的一种数据传输方法的步骤流程图;
59.图2是本发明实施例提供的另一种数据传输方法的步骤流程图;
60.图3是本发明实施例提供的一种数据传输的系统架构示意图之一;
61.图4是本发明实施例提供的一种数据传输的系统架构示意图之二;
62.图5是本发明实施例提供的一种数据传输的系统架构示意图之三;
63.图6是本发明实施例提供的一种数据传输装置的结构框图;
64.图7是本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
65.下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
66.在本发明的各种实施例中,应理解,下述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
67.图1是本发明实施例提供的一种数据传输方法的步骤流程图,该方法可以用于服务端,该服务端与客户端通过网页套接字协议通道连接。
68.本发明实施例中,可以用于实现wts功能,具体是在web端和远程的主机分别建立一个虚拟term,从而实现在web端输入命令并在主机上执行该命令,主机将该命令的执行结果返回web端,可选地,主机可以是linux 主机,主机系统可以包括debian系、redhat系等,debian系可以是debian, ubuntu(乌班图),mint等及其衍生版本,redhat系可以包括redhat(红帽),fedora(费多拉),centos(community enterprise operating system,社区企业操作系统)等。在本发明实施中,web端可以为客户端,客户端可以通过服务端与远程的主机的主机连接,此时,客户端与服务端可以通过网页套接字协议(websocket)通道连接,websocket是html5提供的一种在单个tcp连接上进行全双工通讯的协议,在该通讯协议下客户端和服务端的数据交换简捷,且服务端可以主动向客户端推送数据。
69.该方法可以包括:
70.步骤101、获取连接标识,所述连接标识用于指示所述客户端与主机。
71.本发明实施例中,在连接远程的主机时,服务端可以先获取连接标识,连接标识可以用于指示客户端与主机,可选地,连接标识可以根据由客户端、主机的相关信息拼接、运算得到,也可以由客户端、主机双方预先唯一约定得到,也可以均包括。
72.步骤102、根据所述连接标识在存储中获取预先存入的安全外壳协议通道,所述安全外壳协议通道用于连接所述主机,且与所述连接标识对应。
73.本发明实施例中,安全外壳协议(secure shell,ssh)通道用于远程登录会话和其他网络服务提供安全性的协议,其中,可以预先建立、存储用于在客户端与主机间进行数据传输的ssh通道,并将ssh通道与连接标识对应,从而在数据传输时可以根据连接标识获取对应的ssh通道,该ssh通道可以基于应用需求多次复用,无需在主动或被动断开连接的情
况下重新建立ssh通道。
74.步骤103、通过异步方式从所述网页套接字协议通道获取所述客户端发送的命令,并通过异步方式将所述命令从所述安全外壳协议通道向所述主机发送。
75.步骤104、通过异步方式从所述安全外壳协议通道中获取所述主机针对所述命令的执行结果,并通过异步方式从所述网页套接字协议通道将所述执行结果向所述客户端发送。
76.本发明实施例中,异步是一种无需双方共同时钟的数据传输方式,在多线程处理中异步无需阻塞线程以执行任务,而是可以先处理后续任务,在其他线程处理完成后再回调通知该线程处理对应的任务,协程模式是一种用户态的轻量级线程,采用异步方式,能够良好适应高并发的数据处理任务,服务端可以通过websocket通道与客户端连接,通过ssh通道与主机连接,从而可以通过异步方式从客户端获取命令并发送给主机,再通过异步方式从主机获取对命令的执行结果发送给客户端,从而通过多协程异步的方式实现多线程的处理任务,提升资源利用率。可选地,在不同编程语言中可以对应实现协程模式,如golang中的协程goroutine,python中的 asyncio、gevent、websockets、tornado、sanic、aiohttp、fastapi等,也可以是lua语言、java语言、kotlin语言中的协程,如java中的kilim等。
77.在本发明实施中提供一种数据传输方法,该方法可以用于服务端,服务端与客户端通过网页套接字协议通道连接,可以根据指示服务端与客户端的连接标识获取预先存入的安全外壳协议通道,服务端通过安全外壳协议通道连接主机,此时,服务端可以从通道中获取客户端的命令向服务端发送,获取服务端对命令的执行结果向客户端发送,且均通过异步方式实现。在本发明实施中通过异步方式实现数据传输,能够适应高并发处理请求,有效提高主机资源利用率,同时对安全外壳协议通道进行存储,能够在网络波动导致通道断开时复用,无需重新建立通道,能够有效对抗网络波动,避免数据丢失,提高工作效率。
78.图2是本发明实施例提供的另一种数据传输方法的步骤流程图,该方法可以应用于服务端,该服务端与客户端通过网页套接字协议通道连接。
79.本发明实施例中,服务端、客户端、网页套接字协议通道可对应参照前述图1的相关描述,为避免重复,在此不再赘述。
80.如图2所示,该方法可以包括:
81.步骤201、获取所述客户端发送的主机信息以及客户端信息。
82.本发明实施例中,服务端可以获取客户端发送的主机信息与客户端信息,此时,服务端与客户端可以通过http(hyper text transfer protocol,超文本传输协议)数据传输,其中,主机信息、客户端信息可以是id、ip 地址等,也可以包括用户名、密码等,主机信息、客户端信息等可以从客户端手动输入后获取,也可以按照异步方式查询存储主机信息、客户端信息等数据的数据库。
83.在本技术实施中涉及的具体编程语言、函数名、关键词、web框架以及库、包等仅用于举例,本领域的技术人员在不脱离本发明的精神和主旨上可以做对应编程语言的适配和完善,选择合适的库、包配合完成相同的效果,不造成对本技术的限制。
84.例如,以平台语言python为例,采用python3.6和django3.2作为服务端,以及采用xterm、js构建web端,其中,django3是一种python webserver框架;xterm是采用typescript编写的前端组件,用来模拟命令行界面和操作;django3文档支持asgi服务协
议,asgi是wsgi支持原有模式和websocket的扩展;wsgi(web server gateway interface,web服务器网关接口),是为python语言定义的服务端和客户端、框架间简单、通用的接口,可选地,在python语言中服务端可以采用daphne、uvicorn等托管方案,其他语言可以适应性选择托管方案。
85.此时,可以获取web端基于http协议发送的主机id或主机ip。
86.步骤202、根据所述主机信息建立所述安全外壳协议通道,并根据所述主机信息与所述客户端信息生成所述连接标识。
87.本发明实施例中,根据主机信息服务端可以连接主机建立ssh通道,如可以将主机信息向主机发送,并获取主机在验证通过的情况下向服务端发送的验证结果,从而建立ssh通道实现连接,可选地,服务端可以对获取的主机信息进行验证,在主机信息错误、缺失的情况下,请求客户端更正、补充主机信息,或在数据库中重新查询,或者可以约定由客户端发送部分主机信息,服务端根据客户端发送的部分主机信息获取同其他主机信息等,客户端信息可以此类推。
88.如,根据获取到的主机id获取主机登录用的用户名、登录密码等主机信息,基于主机id、用户名、登录密码等主机信息通过paramiko向主机发送连接请求,接收主机在验证通过的情况下发送的验证结果,由asyncssh 建立ssh通道。
89.其中,paramiko、asyncssh是python中对ssh2的封装库,可以使用它来远程连接主机。
90.本发明实施例中,根据主机信息、客户信息生成连接标识可以是采用主机id、主机ip、用户id、服务端客户端协商得到的信息等至少两个拼接成的字符串,可对应参照步骤101的相关描述,为避免重复,在此不再赘述。
91.步骤203、将所述安全外壳协议通道与所述连接标识对应存入所述存储。
92.本发明实施例中,可以将连接标识与ssh通道对应存储,从而在存储中通过连接标识可以查询到对应的ssh,如将连接标识作为key,将ssh通道作为value存入字典中,从而根据连接标识可以在字典中查询到对应的ssh 通道。
93.如,设置字典,字典的key为主机的ip地址或id,用户id,服务端与客户端预先协商得到的随机数三种信息拼接成的字符串作为连接标识以便区分,存入value为已建立的ssh通道。
94.步骤204、建立连接所述客户端的网页套接字协议通道。
95.本发明实施例中,服务端与客户端之间可以通过http协议传输,在建立ssh通道后,可以将服务端与客户端之间的传输协议升级为websocket 协议已建立连接客户端的网页套接字协议通道,并获取基于websocket协议的异步函数,该异步函数用于执行数据发送、数据接收、通道断开等不同操作。
96.如,在当前django框架中没有支持异步的websocket库,可以编写实现或选择channels3增强框架补充,websocket协议异步化执行,主要包括 accept、send、receive、close等关键的异步函数。在前序步骤均执行无误的情况下,执行步骤204,将http请求升级为websocket协议。
97.步骤205、获取连接标识,所述连接标识用于指示所述客户端与主机。
98.步骤206、根据所述连接标识在存储中获取预先存入的安全外壳协议通道。
99.本发明实施例中,步骤205~步骤206可对应参照前述步骤101~步骤 102的相关描述,为避免重复,在此不再赘述。
100.可选地,所述步骤206包括:
101.步骤s11、根据所述连接标识在存储中确定预先存入的安全外壳协议通道,以及所述安全外壳协议通道的存储时间。
102.步骤s12、在所述存储时间小于过期时间的情况下,返回所述安全外壳协议通道,所述安全外壳协议通道用于连接所述主机,且与所述连接标识对应。
103.步骤s13、在所述存储时间大于或等于所述过期时间的情况下,返回空值。
104.本发明实施例中,为了保证ssh通道的实时性、有效性,在获取ssh通道时可以获取ssh通道的存储时间,存储时间可以是ssh通道存入的时间到采用连接标识查询ssh通道的时间,同时可以为ssh通道设定过期时间,过期时间的长短可以按照需求设置,不同ssh通道的过期时间可以相同也可以不同。在存储时间小于过期时间的情况下,可以确定ssh通道依旧有效,此时,可以将ssh通道返回,以连接主机与服务端,在存储时间大于或等于过期时间的情况下,可以确定ssh通道已失效,此时,可以返回空值,确定服务端与主机无法连接,可以重新建立ssh通道。
105.本发明实施例中,在多协程模式的场景中,还可以对ssh通道的存储、获取添加锁操作,从而保证执行逻辑的先后关系,避免任务冲突。
106.如,在存储ssh通道的过程中,定义类ttldict并实例化为全局变量, ttldict是具有过期时间的字典,在实现key-value的同时,为ssh通道设置过期时间,如可以设置过期时间为30分钟,并记录ssh通道的存入时间。
107.在获取连接标识的情况下,以连接标识为key在字典中查询对应的 value为ssh通道,并获取存入时间与过期时间。
108.根据存入时间与查询时间确定ssh通道的存储时间,在存储时间大于或等于过期时间的情况下,返回空值;
109.在存储时间小于过期时间的情况下,返回存储中连接标识对应的ssh通道。
110.本发明实施例中,也可以周期性的检测存储中的ssh通道是否过期,在连接标识对应的ssh通道过期的情况下,可以清除该ssh通道并重新存储该连接标识对应的ssh通道,以保证存储中的ssh通道实时、可用。
111.可选地,所述步骤206包括:
112.步骤s21、对所述网页套接字协议通道、所述安全外壳协议通道中的至少一个进行周期性的状态检测。
113.步骤s22、在所述网页套接字协议通道、所述安全外壳协议通道中的至少一个发生状态异常的情况下,断开所述网页套接字协议通道以及所述安全外壳协议通道。
114.本发明实施例中,对websocket通道、ssh通道至少一个可以进行周期性的状态检测,以确定通道连接是否存活,在通道处于不通畅或响应超时的状态、或通道处于不通畅或响应超时的状态超过超过一定时间、或通道处于不通畅或响应超时且检测异常次数大于或等于一定次数的情况下,确定websocket通道、ssh通道至少一个状态异常,从而可以确定服务终止,并断开websocket通道和ssh通道。其中,检测周期长度、状态异常的具体条件可以根据技术人员需求进行设置,websocket通道、ssh通道之间的周期长度、状态异常的具体条
件可以相同,也可以不同。
115.如,周期性循环定时发送“ping”消息给websocket通道,ping (packet internet groper,因特网包探索器)是用于检测网络通畅或网络速度的命令,在等待一段时间或多次循环后未接收到对应“pong”帧的情况下,可以认为websocket通道不通畅或超时,断开websocket通道与ssh通道,停止所有协程、循环等,并释放相关资源。
116.周期性循环定时监测服务端与主机连接的ssh通道是否可用,在等待一段时间或多次循环后该ssh通道依旧无法使用的情况下,可以认为ssh通道不通畅或超时,断开websocket通道与ssh通道,停止所有协程、循环等,并释放相关资源。
117.步骤207、通过异步方式从所述网页套接字协议通道获取所述客户端发送的命令,并通过异步方式将所述命令从所述安全外壳协议通道向所述主机发送。
118.步骤208、通过异步方式从所述安全外壳协议通道中获取所述主机针对所述命令的执行结果,并通过异步方式从所述网页套接字协议通道将所述执行结果向所述客户端发送。
119.本发明实施例中,步骤207~步骤208可对应参照前述步骤103~步骤 104的相关描述,为避免重复,在此不再赘述。可选地,还可以在前述步骤执行异常的情况下,可以向客户端返回异常信息,在前述步骤执行正常的情况下获取命令进行数据传输。
120.如,在前述步骤无异常的情况下,执行loop_host、loop_web两个异步函数作为一组进行数据传输,执行过程可如下所示:
121.执行loop_host,通过ttldict获取有效的ssh通道连接主机,通过 receive异步函数获取客户端发送的shell命令、操作符等,以异步方式向远程的主机发送,循环执行上述过程,在通道连接不中断、不发生异常的情况下,该循环持续执行。
122.执行loop_web,通过ttldict获取有效的ssh通道连接主机,以异步方式从ssh通道中获取主机对前述命令的执行结果,并通过send异步函数将执行结果向客户端发送,循环执行上述过程,在通道连接不中断、不发生异常的情况下,该循环持续执行。此处,目前部分实现方式中需要语言内部通道对执行结果进行转发,可能会造成不必要的阻塞和延迟,在本技术实施中获取执行结果以及发送执行结果无需语言内部通道转发,可以直接获取、发送,提高了数据传输的效率。
123.可选地,还可以在loop_host、loop_web两循环中分别加入切换协程执行的机制,避免执行逻辑阻塞在对应函数中,避免徒劳的等待,如,在循环中加入“await asyncio.sleep(0.01)”,其中,数值0.01可以按照需求具体设置。
124.在此基础上,loop_host、loop_web以及后续步骤中的函数均有协程实现、并发执行且相互不阻塞,因此,可以写成“awaitasyncio.gather(self.loop_host(),self.loop_web())”以及时切换协程处理,提高资源利用率以及工作效率。
125.可选地,所述步骤207中通过异步方式从所述网页套接字协议通道获取所述客户端发送的命令之后,还包括:
126.步骤s31、在所述命令指示暂停访问的情况下,断开所述网页套接字协议通道,不断开所述安全外壳协议通道。
127.本发明实施例中,服务端还可以对客户端发送的命令进行判断,在命令指示远程的主机执行任务时,继续步骤207中将该命令采用异步方式发送给主机,在命令指示暂停访
问的情况下,可以先断开服务端与客户端之间的websocket通道,而不断开服务端与主机之间的ssh通道,在之后可以重新建立服务端与客户端之间的websocket通道连接,沿用服务端与主机之间的ssh通道,避免工作进度的丢失。
128.如,通过reactxterm.js在浏览器客户端中模拟shell终端,监听用户按键输入,将每次按键输入通过websocket通道发送,按键输入可以是shell 命令、按键指令如tab等,由主机执行对应的命令、指令等,包括vim、top、 ps、netstat等,此时,可以设置指示通道临时中断的按键,通过对该按键的点击触发指示暂停访问的指令,服务端在接收到指示暂停访问的指令时,可以暂时断开客户端与服务端连接的websocket通道,但不会中断服务端与主机的ssh通道,该命令的消息格式可以自定义,如可以是《stop》。
129.可选地,所述步骤207中通过异步方式从所述网页套接字协议通道获取所述客户端发送的命令之后,还包括:
130.步骤s41、将所述命令存储到检索数据库中。
131.本发明实施例中,在接收到命令后,可以将命令以异步方式写入检索数据库中,以供开发人员、运维人员等检索使用,可选地,可以将命令按照预定格式异步地写入文件系统、消息队列(message queue,mq)中,再由elk(elasticsearch logstash kibana)系统或其他审计系统消费消息队列中的消息,并存储到检索数据库中,实现对命令的异步化日志记录。
132.可选地,所述步骤207中通过异步方式从所述网页套接字协议通道获取所述客户端发送的命令之后,包括:
133.步骤s51、获取命令黑名单,并对所述命令与所述命令黑名单进行匹配。
134.步骤s52、在匹配失败的情况下,通过异步方式将所述命令从所述安全外壳协议通道向所述主机发送。
135.步骤s53、在匹配成功的情况下,拦截所述命令,并从所述网页套接字协议通道向所述客户端发送拦截提示。
136.本发明实施例中,可以设置命令黑名单,命令黑名单可以用于记录恶意命令、错误命令、失效命令等,在接收到客户端发送的命令后,可以对命令与命令黑名单进行匹配,在命令与命令黑名单匹配成功的情况下,可以确定该命令不能被执行,此时,可以拦截该命令中断步骤207的后续执行,并从websocket通道向客户端发送拦截提示,可选地,拦截提示可以包括命令内容,还可以包括拦截原因,如“该命令已更改”、“该命令错误”等等,命令黑名单可以动态配置。
137.如,服务端接收到客户端发送的shell命令后,可以从服务管理系统获取动态配置的shell命令黑名单,并将shell命令与shell命令黑名单进行匹配,在匹配失败的情况下继续将命令向主机发送,在匹配成功的情况下,拦截该命令,并向客户端发送拦截提示。
138.本发明实施例中,在浏览器客户端中,由于浏览器的窗口可能会移动、缩放、拉伸等发生尺寸的变化,从而影响输出格式,而需要主机上虚拟终端的窗口与客户端上虚拟终端的窗口尺寸一致,在此基础上,可以在浏览器的窗口尺寸发生变化时,通过通道向服务端传输尺寸调整指令,以便服务端识别尺寸调整指令指示的操作,从而对尺寸调整指令进行解析,将窗口的尺寸值以异步方式向远程的主机发送,以使主机在建立虚拟终端时调整尺寸与客户端一致,可选地,尺寸调整命令可以由约定格式发送,如“《resize》300 400”。
139.在本发明实施中提供一种数据传输方法,该方法可以用于服务端,服务端与客户端通过网页套接字协议通道连接,可以根据指示服务端与客户端的连接标识获取预先存入的安全外壳协议通道,服务端通过安全外壳协议通道连接主机,此时,服务端可以从通道中获取客户端的命令向服务端发送,获取服务端对命令的执行结果向客户端发送,且均通过异步方式实现。在本发明实施中通过异步方式实现数据传输,能够适应高并发处理请求,有效提高主机资源利用率,同时对安全外壳协议通道进行存储,能够在网络波动导致通道断开时复用,无需重新建立通道,能够有效对抗网络波动,避免数据丢失,提高工作效率。
140.在本发明实施中,添加了异步化的命令记录,以及对命令内容的判断、拦截等机制,能够更好地适应操作需求,提供定制化的操作空间,并且对 ssh通道、websocket通道进行周期性的检测,在发生异常时中断通道连接从而停止任务执行,以回收系统资源,避免资源的无效占用。
141.在本技术实施中,图3示出了一种数据传输的系统架构示意图之一,如图3所示,包括客户端“web浏览器”、主机,以及通过django3服务器实现的服务端,其中,web浏览器采用xterm模拟虚拟teminal用于shell命令输入与接收对命令返回的执行结果,主机支持远程连接;
142.如图3所示,建立websocket通道阶段,包括:
143.步骤301、web浏览器基于http协议将主机的id或ip发送给django3服务器,并将http协议升级为websocket协议。
144.步骤302、django3服务器调用“init_ssh_ws_accept”异步接收主机的 id或ip,并获取主机的id或ip获取主机对应的用户名、登录密码等信息,将主机对应的用户名、登录密码等信息通过paramiko向主机发送。
145.步骤303、主机对用户名、用户密码进行验证,并将验证结果向 django3服务器发送,以建立ssh通道,django3服务器调用“welcome_ws_accept”异步接收主机的验证结果,并根据主机id或ip、用户名、预先约定的随机数等生成连接标识,将ssh通道与连接标识对应存储。
146.步骤304、django3服务器将主机的验证结果异步的发送给web浏览器,并建立websocket通道,以供后续通信。
147.图4示出了一种数据传输的系统架构示意图之二,在图3建立ssh通道、 websocket通道以联通web浏览器与主机;
148.如图4所示,数据传输阶段,包括:
149.步骤401、web浏览器通过websocket通道将shell命令异步地向 django3服务器发送。
150.步骤402、django3服务器循环执行“asyncweb_to_ssh”不断获取web 浏览器发送的shell命令,并将shell命令异步地向主机发送。
151.步骤403、主机执行shell命令,并将执行结果向django3服务器发送。
152.步骤404、django3服务器循环执行“async ssh_to_web”不断获取主机发送的执行结果,并将该执行结果异步地向web浏览器发送。
153.图5示出了一种数据传输的系统架构示意图之三,在图3建立ssh通道、 websocket通道以联通web浏览器与主机;
154.如图5所示,中断连接阶段,包括:
155.步骤501、web浏览器通过websocket通道将中断连接命令异步地向 django3服务器发送。
156.步骤502、django3服务器获取中断连接命令,中断“async web_to_ssh”的循环,并将中断连接命令异步地向主机发送。
157.步骤503、主机执行中断连接命令中断ssh通道,并将执行结果向 django3服务器发送。
158.步骤504、django3服务器中断“async ssh_to_web”的循环,并将该执行结果异步地向web浏览器发送。
159.上述中断通道连接后,可以根据连接标识在存储中获取ssh通道,并基于该ss通道建立服务端与主机的通信,无需重新建立ssh通道,能够有效对抗网络波动。
160.本发明实施例中,在wts功能的实现中,采用异步化的协程模式,通过异步的websocket库实现服务端与web端,且服务端通过异步的ssh通道与远端的主机进行数据传输,在数据传输中涉及多个协程处理,异步化的接收发送命令、执行结果等,能够更好地适应高并发的数据处理场景,有效提高资源利用率。
161.图6是本发明实施例提供的一种数据传输装置60,如图6所示,该装置应用于服务端,该服务端与客户端通过网页套接字协议通道连接,该装置可以包括:
162.标识获取模块601,用于获取连接标识,所述连接标识用于指示所述客户端与主机;
163.通道获取模块602,用于根据所述连接标识在存储中获取预先存入的安全外壳协议通道,所述安全外壳协议通道用于连接所述主机,且与所述连接标识对应;
164.命令传输模块603,用于通过异步方式从所述网页套接字协议通道获取所述客户端发送的命令,并通过异步方式将所述命令从所述安全外壳协议通道向所述主机发送;
165.结果传输模块604,用于通过异步方式从所述安全外壳协议通道中获取所述主机针对所述命令的执行结果,并通过异步方式从所述网页套接字协议通道将所述执行结果向所述客户端发送。
166.可选地,所述装置还包括:
167.信息获取模块,用于获取所述客户端发送的主机信息以及客户端信息;
168.通道建立模块,用于根据所述主机信息建立所述安全外壳协议通道,并根据所述主机信息与所述客户端信息生成所述连接标识;
169.通道存储模块,用于将所述安全外壳协议通道与所述连接标识对应存入所述存储;
170.所述通道建立模块,还用于建立连接所述客户端的网页套接字协议通道。
171.可选地,所述通道获取模块602,包括:
172.通道查询子模块,用于根据所述连接标识在存储中确定预先存入的安全外壳协议通道,以及所述安全外壳协议通道的存储时间;
173.查询返回子模块,用于在所述存储时间小于过期时间的情况下,返回所述安全外壳协议通道;
174.所述查询子模块,还用于在所述存储时间大于或等于所述过期时间的情况下,返
回空值。
175.可选地,所述装置还包括:
176.通道断开模块,用于在所述命令指示暂停访问的情况下,断开所述网页套接字协议通道,不断开所述安全外壳协议通道。
177.可选地,所述命令传输模块603,包括:
178.黑名单匹配子模块,用于获取命令黑名单,并对所述命令与所述命令黑名单进行匹配;
179.命令传输子模块,用于在匹配失败的情况下,通过异步方式将所述命令从所述安全外壳协议通道向所述主机发送;
180.命令拦截子模块,用于在匹配成功的情况下,拦截所述命令,并从所述网页套接字协议通道向所述客户端发送拦截提示。
181.可选地,所述装置还包括:
182.命令存储模块,用于将所述命令存储到检索数据库中。
183.在本发明实施中提供一种数据传输装置,该装置可以用于服务端,服务端与客户端通过网页套接字协议通道连接,可以根据指示服务端与客户端的连接标识获取预先存入的安全外壳协议通道,服务端通过安全外壳协议通道连接主机,此时,服务端可以从通道中获取客户端的命令向服务端发送,获取服务端对命令的执行结果向客户端发送,且均通过异步方式实现。在本发明实施中通过异步方式实现数据传输,能够适应高并发处理请求,有效提高主机资源利用率,同时对安全外壳协议通道进行存储,能够在网络波动导致通道断开时复用,无需重新建立通道,能够有效对抗网络波动,避免数据丢失,提高工作效率。
184.在本发明实施中,添加了异步化的命令记录,以及对命令内容的判断、拦截等机制,能够更好地适应操作需求,提供定制化的操作空间,并且对 ssh通道、websocket通道进行周期性的检测,在发生异常时中断通道连接从而停止任务执行,以回收系统资源,避免资源的无效占用。
185.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置和模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
186.图7是本发明实施例提供的一种电子设备的结构示意图,如图7所示,所述电子设备70包括:接口701,总线702,存储器703与处理器704,所述接口701、存储器703与处理器704通过所述总线702相连接,所述存储器703用于存储可执行程序,所述处理器704被配置为运行所述可执行程序实现如图1至图5任一所述的数据传输方法的步骤。
187.本发明实施例还提供了一种计算机存储介质,所述计算机可读存储介质上存储可执行程序,所述可执行程序被处理器运行实现如图1至图5任一所述的数据传输方法的步骤。
188.需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
189.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方
法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
190.本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本发明旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由权利要求指出。
191.应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。
转载请注明原文地址:https://tc.8miu.com/read-3724.html