设备登录管理方法、存储介质、协议网关及网管客户端与流程

文档序号:14410014阅读:171来源:国知局
设备登录管理方法、存储介质、协议网关及网管客户端与流程

本发明涉及通信技术领域,特别涉及一种设备登录管理方法、存储介质、协议网关及网管客户端。



背景技术:

传统网管广泛通过telnet(telecommunicationnetworkprotocol,电信网络协议)方式登录设备和主机进行管理,telnet方式实现简单,但是由于是明文传输,存在安全隐患,近期的主机和设备都已经升级为ssh登录方式。由于ssh(secureshell,安全外壳程序)方式实现比较复杂,很多传统网管改造起来比较困难。尤其是包含多个开源组件,分别由不同语言编写的情况下更为突出。比较新的语言可能直接就内置了ssh支持,比较古老的语言,比如perl,shell,php,python等语言不能直接支持ssh,只能通过expect等间接手段支持,比较麻烦,而且相应的代码需要重新改造。尤其是集成的一些第三方模块,改造更为困难。

例如,现有技术中的一种改造方案是各种语言分别改造以支持ssh,例如perl的expect方式,通过调用系统的ssh命令实现登录设备。好处是ssh命令是操作系统自带的,缺点是这种方式性能较低,管理少数(数百台)的主机和设备尚可,一旦规模扩大,效率就很低下。现有系统中采用的perl,php,python,java等语言的实现方案都有类似问题。而且不同语言的ssh实现方式不同,需要分别探索,工作量比较大。

现有技术中的另一种可行方案是将设备登录这块抽取出来,单独用一种语言实现,包装为服务,这个也是常见的设计模式。缺点是原来的业务逻辑比较复杂,不是简单地执行命令,而是存在上下文交互,改造工作量很大。

类似的解决思路还有跳板机和堡垒机,但是现有方案主要是考虑登录的安全控制和审计,并非为网管自动化考虑,在应用层隔离了客户端和设备,性能方面难以满足自动化登录的要求。

还有一个比较重要的问题,随着管理规模的扩大,对性能的要求也越来越迫切。而很多语言的ssh支持方案其实是系统的openssh的封装,采用进程间通信实现,在管理海量(5000+)设备的时候,由于操作系统的限制,并发大量的ssh进程,是不切实的。目前主流的解决大规模并发的方案就是基于事件或者协程模型编程,这样一来,既要支持协程,又要支持ssh的就更困难了。以perl为例,cpan上至今也没有可以协程或者事件方式原生支持ssh的模块。python的ssh模块paramiko也同样不支持协程。

现有技术存在的问题可以归纳为:不支持并发大量的ssh进程;要么不支持ssh。



技术实现要素:

本发明实施例提供了一种设备登录管理方法,以解决现有技术中网管登录设备进行管理的方案中网管不支持ssh需要进行程序改造、改造后性能低的技术问题。该方法包括:在网管客户端和待管理设备之间设置协议网关,在传输层,基于电信网络协议建立所述协议网关与所述网管客户端之间的连接,基于安全外壳程序建立所述协议网关与所述待管理设备之间的连接;在所述协议网关与所述网管客户端建立连接且所述协议网关与所述待管理设备建立连接之后,通过所述协议网关将所述网管客户端与所述待管理设备中一方发送的数据直接转发给另一方。

本发明实施例还提供了一种计算机可读存储介质,以解决现有技术中网管登录设备进行管理的方案中网管不支持ssh需要进行程序改造、改造后性能低的技术问题。所述计算机可读存储介质存储有执行上述任一种设备登录管理方法的计算机程序。

本发明实施例还提供了一种协议网关,以解决现有技术中网管登录设备进行管理的方案中网管不支持ssh需要进行程序改造、改造后性能低的技术问题。该协议网关包括:连接建立模块,用于在传输层,基于电信网络协议建立所述协议网关与所述网管客户端之间的连接,基于安全外壳程序建立所述协议网关与所述待管理设备之间的连接;数据转发模块,用于在所述协议网关与所述网管客户端建立连接且所述协议网关与所述待管理设备建立连接之后,将所述网管客户端与所述待管理设备中一方发送的数据直接转发给另一方。

本发明实施例还提供了一种网管客户端,以解决现有技术中网管登录设备进行管理的方案中网管不支持ssh需要进行程序改造、改造后性能低的技术问题。该网管客户端包括:请求建立连接模块,用于在传输层,请求协议网关基于电信网络协议建立协议网关与所述网管客户端之间的连接,请求所述协议网关基于安全外壳程序建立所述协议网关与待管理设备之间的连接;通信模块,用于通过所述协议网关将数据转发给所述待管理设备,接收所述协议网关转发的所述待管理设备发送的数据。

在本发明实施例中,通过在网管客户端和待管理设备之间设置协议网关,并在传输层,基于电信网络协议建立协议网关与网管客户端之间的连接,即建立telnet连接,基于安全外壳程序建立协议网关与待管理设备之间的连接,即建立ssh连接,进而通过协议网关将网管客户端与待管理设备中一方发送的数据直接转发给另一方,使得网管客户端无需支持ssh连接,原来只支持telnet连接的网管客户端程序几乎不用修改就可以通过协议网关以ssh连接方式登录待管理设备,避免传统只支持telnet连接的网管客户端通过大量的程序修改来支持ssh连接;同时,由于网管客户端无需支持ssh连接就可以通过协议网关以ssh连接方式登录待管理设备,使得网管客户端可以兼容不同开发语言,避免网管客户端并发大量的ssh进程,有利于支持海量设备的访问,有利于提高性能。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,并不构成对本发明的限定。在附图中:

图1是本发明实施例提供的一种设备登录管理方法的流程图;

图2是本发明实施例提供的一种设置协议网关的架构示意图;

图3是本发明实施例提供的一种通过协议网关建立telnet连接和ssh连接的交互图;

图4是本发明实施例提供的一种telnet协议扩展示意图;

图5是本发明实施例提供的一种协议网关的结构框图;

图6是本发明实施例提供的一种网管客户端的结构框图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施方式和附图,对本发明做进一步详细说明。在此,本发明的示意性实施方式及其说明用于解释本发明,但并不作为对本发明的限定。

在本发明实施例中,提供了一种设备登录管理方法,如图1所示,该方法包括:

步骤101:在网管客户端和待管理设备之间设置协议网关,在传输层,基于电信网络协议建立所述协议网关与所述网管客户端之间的连接,即在协议网关与网管客户端之间建立telnet连接,基于安全外壳程序建立所述协议网关与所述待管理设备之间的连接,即在协议网关与待管理设备之间建立ssh连接;

步骤102:在所述协议网关与所述网管客户端建立连接且所述协议网关与所述待管理设备建立连接完成之后,通过所述协议网关将所述网管客户端与所述待管理设备中一方发送的数据直接转发给另一方。

由图1所示的流程可知,在本发明实施例中,通过在网管客户端和待管理设备之间设置协议网关,并在传输层,基于电信网络协议建立协议网关与网管客户端之间的连接,即建立telnet连接,基于安全外壳程序建立协议网关与待管理设备之间的连接,即建立ssh连接,进而通过协议网关将网管客户端与待管理设备中一方发送的数据直接转发给另一方,使得网管客户端无需支持ssh连接,原来只支持telnet连接的网管客户端程序几乎不用修改就可以通过协议网关以ssh连接方式登录待管理设备,避免传统只支持telnet连接的网管客户端通过大量的程序修改来支持ssh连接;同时,由于网管客户端无需支持ssh连接就可以通过协议网关以ssh连接方式登录待管理设备,使得网管客户端可以兼容不同开发语言,避免网管客户端并发大量的ssh进程,有利于支持海量设备的访问,有利于提高性能。

具体实施时,通过分析、比较ssh和telnet协议之后,本申请发明人发现telnet和ssh只是传输层的控制协议不同,在应用连接和应用层协议基本是兼容的,因此,如图2所示,本申请在网管客户端和待管理设备中间设置协议网关,协议网关在传输层与网管客户端建立telnet连接且与待管理设备建立ssh连接,协议网关只需要对传输层以上的内容进行解包和转发。即协议网关部分不参与业务消息的转换,只是简单地转发,因而可以做到和业务无关,具备更好的通用性。同时,因为无须切换上下文状态,可以简单地通过集群方式实现水平扩展,有利于解决高可用和高性能问题。该协议网关在传输层而不是应用层实现消息透明转发,如果在应用层通过web服务方式实现,由于http和ssh协议不兼容,处理起来会麻烦很多。

协议网关的设置,对于原来网管客户端的程序而言,仍然是通过telnet连接方式访问,只是目标变成了协议网关,可以做到最大限度地兼容了原来的程序接口。通过这种方式,原来的只支持telnet连接功能的语言,也具备了ssh连接的支持能力。

具体实施时,为了实现协议网关建立连接的控制是自动化的,在本实施例中,在传输层,基于电信网络协议建立所述协议网关与所述网管客户端之间的连接,基于安全外壳程序建立所述协议网关与所述待管理设备之间的连接,包括:在所述协议网关接收到所述网管客户端发送的用于基于电信网络协议建立连接的第一控制信令时,根据所述第一控制信令基于电信网络协议建立所述协议网关与所述网管客户端之间的连接;在所述协议网关接收到所述网管客户端发送的用于基于安全外壳程序建立连接的第二控制信令时,根据所述第二控制信令基于安全外壳程序建立所述协议网关与待管理设备之间的连接,其中,所述第二控制信令包括要建立连接的待管理设备的信息,例如,可以是待管理设备的地址信息、登录信息等。即不需要通过人为的配置或者指令来控制协议网关,网管客户端发起控制信令即可控制协议网关建立连接。

具体实施时,为了进一步完善协议网关透明和全自动转发数据的功能,在本实施例中,在所述协议网关与所述网管客户端建立连接且所述协议网关与所述待管理设备建立连接完成之前,所述协议网关为建立连接状态,将接收到的消息作为用于建立连接的控制信令;在所述协议网关与所述网管客户端建立连接且所述协议网关与所述待管理设备建立连接完成之后,所述协议网关为通信状态,将接收到的消息作为所述网管客户端与所述待管理设备之间交互的数据,并对数据直接进行转发。

具体的,在同一连接中分时随路传输控制信令。也就是说,需要网管客户端通知协议网关需要建立ssh连接的设备(即待管理设备)的信息,通过连接状态进行控制协议网关,在协议网关与网管客户端建立telnet连接且协议网关与待管理设备建立ssh连接完成之前,传递的消息可以作为建立连接的控制信令,而一旦telnet连接和ssh连接建立完成,双向管道创建完成,协议网关切换到通信状态,传递的消息就认为全部是数据了,此时协议网关和业务无关,不存在消息落地和转换,无须保存状态,只负责透明的数据转发,可以很容易地实现水平扩展,保证高性能和高可用。

具体的,以下结合图2、3描述上述协议网关与网管客户端建立telnet连接以及与待管理设备建立ssh连接的过程,该过程包括以下步骤:

s01:客户端(即上述网管客户端)首先发起到协议网关基于电信网络协议建立连接的请求,即请求建立telnet连接,验证通过后进入控制信令交互模式,客户端向协议网关发送用于基于电信网络协议建立连接的第一控制信令,协议网关根据第一控制信令基于电信网络协议建立协议网关与客户端之间的telnet连接。

s02:客户端向协议网关发送远程的基于安全外壳程序建立连接的指令(即上述用于建立ssh连接的第二控制信令),其中包括待管理设备的地址信息、登录信息等。

s03:协议网关收到指令后,基于安全外壳程序创建协议网关到目标设备/主机(即待管理设备)的ssh连接,启动交互式shell。

s04:如果连接成功,则创建双向通信管道,连通客户端侧的telnet连接和设备侧的ssh连接,进入通信状态。

s05:由于telent和ssh在应用层的协议是兼容的,所以可以做到无缝对接。客户端可以直接和目标设备进行指令交互,协议网关在中间只是起到转发的作用。

s06:客户端或者目标设备任何一方终止会话,同时关闭telnet连接、ssh连接和连接管道,结束本次通信。

具体实施时,为了进一步满足高性能和海量连接的要求,在本实施例中,对网管客户端(现有系统)采用协程技术进行改造,例如,在网管客户端中,通过基于事件的非阻塞io库来实现以协程的方式处理基于电信网络协议建立连接的请求。

具体的,采用协程技术的一个好处是,程序逻辑比较简单,和传统的客户端/服务器编程模式几乎相同。而并发性能则比进程或者线程模式高得多。在现有的系统中,为了实现登录设备或者主机的功能,通常都包含有telnet模块,并且已经做了一定的封装(比如登录、退出、执行命令等)。如图4所示,由于telnet协议比较简单,基本上就是tcp协议的简单语义扩展,telnet协议的实现比ssh简单的多,可以将telnetclient改造为支持协程的版本,这样单台客户端就可以实现上万台设备的并行登录,比传统的方式效率提升了10倍以上。具体操作可以是将telnet模块改造为非阻塞的模块。

原来的telnet模块是基于底层的socket网络io库实现,而传统的socket库都是阻塞模式的(一个线程只能监听一个socket句柄)。本申请改造的思路是通过引入基于事件的非阻塞io库(基于libev/libevent),替换掉原来的阻塞模式的io库,使得一个线程可以同时处理多个socket句柄。这部分,主要是底层的基础网络模块的修改(常见的开源网管产品很多也是基于perl或者python开发的,perl可以基于coro改造,python可以基于gevent或者asyncio改造),上层的变化不大,基本就是用协程的语法替换掉原来的多线程的语法,每个协程负责处理一个socket。使用改造后的支持协程的telnet客户端,封装好登录连接,可以直接替换掉原来的阻塞式的客户端部分,代码改动量很小。原来的系统中,需要通过多线程/多进程来处理多台设备的telnet连接登录,改造以后单个进程/线程就可以同时处理数百台设备的登录。

具体实施时,在本实施例中提供了一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述任一种设备登录管理方法的计算机程序。

基于同一发明构思,本发明实施例中还提供了一种协议网关,如下面的实施例所述。由于协议网关解决问题的原理与设备登录管理方法相似,因此协议网关的实施可以参见设备登录管理方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。

图5是本发明实施例的协议网关的一种结构框图,如图5所示,该协议网关包括:

连接建立模块501,用于在传输层,基于电信网络协议建立所述协议网关与所述网管客户端之间的连接,基于安全外壳程序建立所述协议网关与所述待管理设备之间的连接;

数据转发模块502,用于在所述协议网关与所述网管客户端建立连接且所述协议网关与所述待管理设备建立连接之后,将所述网管客户端与所述待管理设备中一方发送的数据直接转发给另一方。

在一个实施例中,连接建立模块501,包括:telnet连接建立单元,用于在接收到所述网管客户端发送的用于基于电信网络协议建立连接的第一控制信令时,根据所述第一控制信令基于电信网络协议建立所述协议网关与所述网管客户端之间的连接;ssh连接建立单元,用于在接收到所述网管客户端发送的用于基于安全外壳程序建立连接的第二控制信令时,根据所述第二控制信令基于安全外壳程序建立所述协议网关与待管理设备之间的连接,其中,所述第二控制信令包括要建立连接的待管理设备的信息。

在一个实施例中,协议网关还包括:状态识别模块,用于在所述协议网关与所述网管客户端建立连接且所述协议网关与所述待管理设备建立连接完成之前,确定所述协议网关为建立连接状态,将接收到的消息作为用于建立连接的控制信令;在所述协议网关与所述网管客户端建立连接且所述协议网关与所述待管理设备建立连接完成之后,确定所述协议网关为通信状态,将接收到的消息作为所述网管客户端与所述待管理设备之间交互的数据,指示所述数据转发模块对数据直接进行转发。

在本实施例中,还提供了一种网管客户端,如图6所示,该网管客户端包括:

请求建立连接模块601,用于在传输层,请求协议网关基于电信网络协议建立协议网关与所述网管客户端之间的连接,请求所述协议网关基于安全外壳程序建立所述协议网关与待管理设备之间的连接;

通信模块602,用于在所述协议网关与所述网管客户端建立连接且所述协议网关与所述待管理设备建立连接完成之后,通过所述协议网关将数据转发给所述待管理设备,接收所述协议网关转发的所述待管理设备发送的数据。

在一个实施例中,请求建立连接模块601,包括:请求建立telnet连接单元,用于向所述协议网关发送用于基于电信网络协议建立连接的第一控制信令,指示所述协议网关根据所述第一控制信令基于电信网络协议建立所述协议网关与所述网管客户端之间的连接;请求建立ssh连接单元,用于向所述协议网关发送用于基于安全外壳程序建立连接的第二控制信令,指示所述协议网关根据所述第二控制信令基于安全外壳程序建立所述协议网关与所述待管理设备之间的连接;其中,所述第二控制信令包括要建立连接的待管理设备的信息。

在一个实施例中,网管客户端还包括:telnet连接处理模块,用于通过基于事件的非阻塞io库来实现以协程的方式处理基于电信网络协议建立连接的请求。

本发明实施例实现了如下技术效果:通过在网管客户端和待管理设备之间设置协议网关,并在传输层,基于电信网络协议建立协议网关与网管客户端之间的连接,即建立telnet连接,基于安全外壳程序建立协议网关与待管理设备之间的连接,即建立ssh连接,进而通过协议网关将网管客户端与待管理设备中一方发送的数据直接转发给另一方,使得网管客户端无需支持ssh连接,原来只支持telnet连接的网管客户端程序几乎不用修改就可以通过协议网关以ssh连接方式登录待管理设备,避免传统只支持telnet连接的网管客户端通过大量的程序修改来支持ssh连接;同时,由于网管客户端无需支持ssh连接就可以通过协议网关以ssh连接方式登录待管理设备,使得网管客户端可以兼容不同开发语言,避免网管客户端并发大量的ssh进程,有利于支持海量设备的访问,有利于提高性能。

显然,本领域的技术人员应该明白,上述的本发明实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明实施例不限制于任何特定的硬件和软件结合。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1