一种虚拟机访问方法、装置、电子设备和存储介质与流程

文档序号:28499644发布日期:2022-01-15 04:40阅读:82来源:国知局
一种虚拟机访问方法、装置、电子设备和存储介质与流程

1.本发明实施例涉及网络技术领域,特别是涉及一种虚拟机访问方法、一种虚拟机访问装置、电子设备和存储介质。


背景技术:

2.虚拟机的带外管理方式,是指不通过虚拟机本身的网络,而是依靠宿主机的网络来打开虚拟机的console(控制台),从而达到即使在虚拟机网络不通的情况下,仍然能通过web的方式控制虚拟机。常见的云平台的访问网络console实现,例如openstack开源项目,均基于novnc前端,结合websocket协议代理转发vnc(virtual network console,虚拟网络控制台)链接实现。
3.然而,在目前的访问网络console实现中,虚拟机的宿主机上需开放所有虚拟机的vnc监听端口,而虚拟机的vnc端口是在一定范围内非固定的,大范围开放端口存在一定安全风险。


技术实现要素:

4.本发明实施例是提供一种虚拟机访问方法,以解决现有技术中虚拟机访问安全性不高的问题。
5.相应的,本发明实施例还提供了一种虚拟机访问装置,用以保证上述方法的实现及应用。
6.为了解决上述问题,本发明实施例公开了一种虚拟机访问方法,应用于代理服务器,所述方法包括:
7.接收云平台终端对虚拟机的第一访问请求;所述第一访问请求包括第一请求信息,所述第一请求信息包括所述虚拟机的宿主机的宿主机地址信息;
8.创建与所述宿主机地址信息对应的所述宿主机的ssh隧道;
9.向所述云平台终端返回所述代理服务器的访问地址信息,以使所述云平台终端通过所述访问地址信息访问所述代理服务器,进而所述代理服务器通过所述ssh隧道访问所述宿主机的所述虚拟机。
10.可选地,所述第一请求信息还包括虚拟机的虚拟机地址信息,所述创建与所述宿主机地址信息对应的所述宿主机的ssh隧道,包括:
11.随机选取所述代理服务器的未使用的代理服务器端口;
12.创建所述代理服务器端口与所述宿主机地址信息对应的所述宿主机的ssh隧道,以使所述代理服务器端口通过所述ssh隧道与所述宿主机的所述虚拟机地址信息对应的所述虚拟机的虚拟机端口进行连接。
13.可选地,所述第一请求信息还包括第一用户标识,所述宿主机地址信息包括所述虚拟机的宿主机的主机域名、虚拟机的宿主机的ip地址,所述虚拟机地址信息包括所述虚拟机的通用唯一识别码和所述虚拟机的ip地址。
14.可选地,在所述向所述云平台终端返回所述代理服务器的访问地址信息之后,所述方法还包括:
15.随机生成第一身份标识,将所述第一身份标识与所述第一请求信息组合成身份验证信息并保存到缓存中;
16.将携带所述身份验证信息的访问地址信息返回所述云平台终端;
17.接收所述云平台终端针对所述访问地址信息发送第二访问请求,所述第二访问请求包括第二身份标识和第二用户标识;
18.当所述第二身份标识与所述身份验证信息中的所述第一身份标识相同时,从所述身份验证信息中获取所述第一用户标识;
19.当所述第二用户标识与所述第一用户标识相同时,与所述云平台终端建立链接。
20.可选地,还包括:
21.当所述第二身份标识与所述身份验证信息中的所述第一身份标识不相同时,或当所述第二用户标识与所述第一用户标识不同时,返回错误提示信息到所述云平台终端。
22.可选地,所述与所述云平台终端建立链接之后,还包括:
23.接收所述云平台终端发送的数据;
24.将所述数据转发到所述代理服务器端口,以使所述代理服务器端口通过所述ssh隧道将所述数据转发到所述虚拟机端口。
25.可选地,所述创建与所述宿主机地址信息对应的所述宿主机的ssh隧道之后,还包括:
26.以预设的间隔时间检测所述代理服务器端口与所述虚拟机之间的链接状态;
27.当所述代理服务器端口与所述虚拟机之间的链接状态为断开连接状态时,销毁所述ssh隧道,并将所述身份验证信息从所述缓存中清除。
28.本发明实施例还公开了一种虚拟机访问装置,应用于代理服务器,所述装置包括:
29.访问请求接收模块,用于接收云平台终端对虚拟机的第一访问请求;所述第一访问请求包括第一请求信息,所述第一请求信息包括所述虚拟机的宿主机的宿主机地址信息;
30.ssh隧道创建模块,用于创建与所述宿主机地址信息对应的所述宿主机的ssh隧道;
31.访问地址信息返回模块,用于向所述云平台终端返回所述代理服务器的访问地址信息,以使所述云平台终端通过所述访问地址信息访问所述代理服务器,进而所述代理服务器通过所述ssh隧道访问所述宿主机的所述虚拟机。
32.可选地,所述ssh隧道创建模块,用于随机选取所述代理服务器的未使用的代理服务器端口;创建所述代理服务器端口与所述宿主机地址信息对应的所述宿主机的ssh隧道,以使所述代理服务器端口通过所述ssh隧道与所述宿主机的所述虚拟机地址信息对应的所述虚拟机的虚拟机端口进行连接。
33.可选地,所述第一请求信息还包括第一用户标识,所述宿主机地址信息包括所述虚拟机的宿主机的主机域名、虚拟机的宿主机的ip地址,所述虚拟机地址信息包括所述虚拟机的通用唯一识别码和所述虚拟机的ip地址。
34.可选地,链接建立模块,用于随机生成第一身份标识,将所述第一身份标识与所述
第一请求信息组合成身份验证信息并保存到缓存中;将携带所述身份验证信息的访问地址信息返回所述云平台终端;接收所述云平台终端针对所述访问地址信息发送第二访问请求,所述第二访问请求包括第二身份标识和第二用户标识;当所述第二身份标识与所述身份验证信息中的所述第一身份标识相同时,从所述身份验证信息中获取所述第一用户标识;当所述第二用户标识与所述第一用户标识相同时,与所述云平台终端建立链接。
35.可选地,所述链接建立模块,用于当所述第二身份标识与所述身份验证信息中的所述第一身份标识不相同时,或当所述第二用户标识与所述第一用户标识不同时,返回错误提示信息到所述云平台终端。
36.可选地,数据传输模块,用于当接收所述云平台终端发送的数据;将所述数据转发到所述代理服务器端口,以使所述代理服务器端口通过所述ssh隧道将所述数据转发到所述虚拟机端口。
37.可选地,链接状态检测模块,用于以预设的间隔时间检测所述代理服务器端口与所述虚拟机之间的链接状态;当所述代理服务器端口与所述虚拟机之间的链接状态为断开连接状态时,销毁所述ssh隧道,并将所述身份验证信息从所述缓存中清除。
38.本发明实施例公开了一种电子设备,包括处理器、存储器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上所述的虚拟机访问方法的步骤。
39.本发明实施例公开了一种计算机可读存储介质,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现如上所述的虚拟机访问方法的步骤。
40.本发明实施例包括以下优点:
41.在本发明实施例中,接收云平台终端对虚拟机的第一访问请求,创建与第一访问请求中的宿主机地址信息对应的宿主机的ssh隧道,使得在向云平台终端返回代理服务器的访问地址信息后,云平台终端可以通过访问地址信息访问代理服务器,进而代理服务器通过ssh隧道访问宿主机的虚拟机。本发明实施例通过使用ssh隧道的方式来传输虚拟机的数据流,由于ssh隧道在进行数据流传输前已经确定虚拟机的vnc端口,从而可以避免开放所有虚拟机的vnc端口,提升了虚拟机访问的安全性。
附图说明
42.图1是openstack使用网络console的一种流程示意图;
43.图2是本发明的一种虚拟机访问方法实施例的步骤流程图;
44.图3本发明的一种创建ssh隧道的示意图;
45.图4是本发明的一种虚拟机访问的流程示意图;
46.图5是本发明的一种虚拟机访问装置实施例的结构框图。
具体实施方式
47.为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
48.常见的云平台的访问网络console实现,例如openstack开源项目,均基于novnc前端,结合websocket协议代理转发vnc链接实现。
49.novnc是一个vnc协议的前端实现,通过websocket协议将vnc的数据流以web(world wide web,全球广域网)的方式传输到用户的浏览器,openstack等云平台基于以上技术进行封装和生成uuid等上层管理方式,来向用户提供访问console服务。websocket是一种在单个tcp连接上进行全双工通信的协议,使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
50.参照图1,示出了openstack使用网络console的一种流程示意图,具体包括以下步骤:
51.步骤1、用户从浏览器连接到虚拟机的vnc client(客户端);
52.步骤2、浏览器向nova-api发送请求,要求返回访问vnc的url(unifor m resource locator,统一资源定位器);
53.api(application programming interface,应用程序接口)是一些预先定义的接口(如函数、http接口),或指软件系统不同组成部分衔接的约定。用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问源码,或理解内部工作机制的细节。
54.其中,nova-api是访问并使用nova所提供的各种服务的唯一途径,作为客户端和nova之间的中间层,nova-api扮演了一个桥梁,或者说中间人的角色,nova-api把客户端的请求传达给nova,待nova处理完请求后再将处理结果返回给客户端。
55.步骤3、nova-api调用nova-compute的get vncconsole(获取vnc控制台)方法,要求返回连接vnc的信息;
56.nova-compute是管理和配置虚拟机的入口,用于创建和管理虚拟机;作为直接操作虚拟机的服务,它接到请求之后,通过整合libvirt,openvswitch/bridge,rbd/iscsi等的操作来达成请求。
57.调用get vncconsole(获取vnc控制台)方法,可以获取到当前vnc控制台的信息。
58.步骤4、nova-compute调用libvirt的get vncconsole函数;
59.libvirt是用于管理虚拟化平台的开源的api,后台程序和管理工具,提供了一个方便的方式来管理虚拟机和其他虚拟化功能的软件的集合,如存储和网络接口管理。
60.步骤5、libvirt会通过解析虚拟机运行的/etc/libvirt/qemu/instance-00000011.xml文件来获得vnc server(服务器)的信息;
61.其中,vncserver的信息包括虚拟机的host(主机/宿主机),port(端口)等信息,在获取到这些信息后,就可以确定虚拟机的宿主机,以及通过该端口进行通讯。
62.步骤6、libvirt将host,port等信息以json(javascript object notation,js对象简谱)格式返回给nova-compute;
63.步骤7、nova-compute会随机生成一个uuid作为token;
64.uuid(universally unique identifier,通用唯一识别码),uuid是一个128比特的数值,这个数值可以通过一定的算法计算出来。为了提高效率,常用的uuid可缩短至16位。uuid用来识别属性类型,在所有空间和时间上被视为唯一的标识。一般来说,可以保证这个值是真正唯一的任何地方产生的任意一个uuid都不会有相同的值。
65.token(计算机身份认证令牌),代表执行某些操作的权利的对象,在执行操作或数
据传输之前,要先核对令牌,只有令牌通过了验证,才可以获得授权。
66.步骤8、nova-compute将libvirt返回的信息以及配置文件中的信息综合成connect_info(连接信息)返回给nova-api;
67.步骤9、nova-api会调用nova-consoleauth的authorize_console函数;
68.步骤10(a)、nova-consoleauth会将instance(实例)

》token,tok en

》connect_info的信息缓存起来;
69.其中,nova-consoleauth和authorize_console为openstack中自带的接口或函数。
70.步骤11(b)、nova-api将connect_info中的access url(access数据库url)信息返回给浏览器:
71.http://192.168.150.10:6080/vnc_auto.html?token=7efaee3f-eada-4731-a87c-e173cbd25e98&title=servera%289169fdb2-5b74-46b1-9803-60d2926bd97c%29
72.步骤12(c)、浏览器会试图打开上述链接;
73.步骤13(d)、这个链接会将请求发送给nova-novncproxy;
74.步骤14(e)、nova-novncproxy调用nova-consoleauth的check_token函数;
75.nova-consoleauth:提供token验证,维护token与ip地址、端口号的映射。
76.nova-novncproxy:openstack自带的接口或函数,支持基于浏览器的vnc客户端,通常与nova-api部署在一起。
77.check_token函数用于对token进行验证,返回验证的结果。
78.步骤15(f)、nova-consoleauth验证了这个token,将这个instance对应的connect_info返回给nova-novncproxy;
79.步骤16(g)、nova-novncproxy通过connect_info中的host,port等信息,连接nova-compute节点上的vncserver,从而开始了控制台代理的工作,即与虚拟机建立了连接,通过websocket协议传输数据,以对虚拟机控制台进行操作。
80.上述的方式虚拟机的宿主机上需开放所有虚拟机的vnc监听端口,而虚拟机的vnc端口是在一定范围内非固定的,开放大范围端口存在一定安全风险,生成的uuid作为token是在url中显性存在的,而其他云平台如openstack只是简单检查token是否存在,并不进行鉴权,意味着只要将返回的url发送给任何人,都能打开虚拟机的console并且可以直接使用root权限,uuid也无法做到在用完后马上清理token,存在泄露的风险,安全性不高。
81.针对上述问题,本发明实施例提出了一种虚拟机访问方法,使用ssh隧道的方式来传输虚拟机的数据流,由于ssh隧道在进行数据流传输前已经确定虚拟机的vnc端口,从而可以避免开放所有虚拟机的vnc端口,提升了虚拟机访问的安全性。
82.参照图2,示出了本发明的一种虚拟机访问方法实施例的步骤流程图,应用于代理服务器,本发明实施例可以包括如下步骤:
83.步骤201、接收云平台终端对虚拟机的第一访问请求;所述第一访问请求包括第一请求信息,所述第一请求信息包括所述虚拟机的宿主机的宿主机地址信息;
84.其中,云平台终端可以是用户使用的终端设备,终端设备可以是手机、平板电脑、计算机等可以访问云平台的终端,用户可以使用终端设备通过浏览器、网页、云平台前端等方式访问云平台,本发明对此不作限制。
85.所述第一请求信息还包括第一用户标识,所述宿主机地址信息包括所述虚拟机的宿主机的主机域名、虚拟机的宿主机的ip地址,所述虚拟机地址信息包括所述虚拟机的通用唯一识别码和所述虚拟机的ip地址。
86.其中,用户标识可以是用户名、用户编号或其他可以区分和确定用户身份的标记;域名(domain name),是由一串用点分隔的名字组成的internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置);ip地址(internet protocol address)用于确定internet上的每台主机,它是每台主机唯一性的标识。一个ip地址由32个二进制比特数字组成,通常被分割为4段,每段8位(1个字节),ip地址的表示方法如下:aaa.bbb.ccc.ddd每段(aaa、bbb、ccc或ddd)的取值范围为0~255,段与段之间由圆点分开。
87.具体实现中,用户可以通过云平台终端访问虚拟机的控制台,在向代理服务器发出访问请求时,可以携带请求信息,其中,请求信息可以包括目标虚拟机的宿主机的宿主机地址信息。代理服务器接收到访问请求后,可以从访问请求中提取出请求信息,如提取出宿主机地址信息后,可通过宿主机地址信息确定出目标虚拟机所在的宿主机。
88.一种示例是,云平台将请求转发给vnc代理服务器,需要带上url参数username(申请访问虚拟机console的用户的用户名),hostname(需要访问的虚拟机所在的宿主机,可以是主机域名或者ip地址),uuid(虚拟机的uuid),vmip(虚拟机的ip地址),url例子如:/vnc?username=《username》&hostname=《hostname》&uuid=《uuid》&vmip=《vmip》。
89.步骤202、创建与所述宿主机地址信息对应的所述宿主机的ssh隧道;
90.ssh(安全外壳协议),为建立在应用层基础上的安全协议。ssh是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用ssh协议可以有效防止远程管理过程中的信息泄露问题。
91.隧道(tunneling)是一种把一种网络协议封装进另外一种网络协议进行传输的技术,本质上是端口转发,能够将其他tcp端口的网络数据通过ssh链接来转发,并且自动提供了相应的加密及解密服务,ssh隧道通常会绑定一个本地端口,所有发向这个端口的数据包,都会被加密并透明地传输到远端系统。
92.具体实现中,代理服务器接收到请求后,可以从请求信息中提取出虚拟机的宿主机的hostname,然后从本地随机抽取一个未使用的端口,和该宿主机创建ssh隧道链接。
93.步骤203、向所述云平台终端返回所述代理服务器的访问地址信息,以使所述云平台终端通过所述访问地址信息访问所述代理服务器,进而所述代理服务器通过所述ssh隧道访问所述宿主机的所述虚拟机。
94.代理服务器在与虚拟机的宿主机建立了ssh隧道之后,可以生成访问地址返回给云平台终端,其中,访问地址信息可以包含有用于验证用户的验证信息。云平台终端在接收到访问地址之后,可以跳转访问该地址。云平台终端在访问时,可以带上与访问地址信息中的验证信息对应的待验证信息以供代理服务器进行验证。验证通过后,用户即可在云平台终端通过代理服务器与虚拟机的宿主机之间的ssh隧道访问虚拟机。
95.在本发明实施例中,接收云平台终端对虚拟机的第一访问请求,创建与第一访问请求中的宿主机地址信息对应的宿主机的ssh隧道,使得在向云平台终端返回代理服务器的访问地址信息后,云平台终端可以通过访问地址信息访问代理服务器,进而代理服务器
通过ssh隧道访问宿主机的虚拟机。本发明实施例通过使用ssh隧道的方式来传输虚拟机的数据流,由于ssh隧道在进行数据流传输前已经确定虚拟机的vnc端口,从而可以避免开放所有虚拟机的vnc端口,提升了虚拟机访问的安全性。
96.在一示例性实施例中,所述第一请求信息还包括虚拟机的虚拟机地址信息,所述步骤202、所述创建与所述宿主机地址信息对应的所述宿主机的ssh隧道,包括:
97.随机选取所述代理服务器的未使用的代理服务器端口;
98.创建所述代理服务器端口与所述宿主机地址信息对应的所述宿主机的ssh隧道,以使所述代理服务器端口通过所述ssh隧道与所述宿主机的所述虚拟机地址信息对应的所述虚拟机的虚拟机端口进行连接。
99.ssh隧道,即ssh端口转发,是一种在客户端和服务器机器之间创建加密ssh连接的方法。数据依靠ssh隧道可以实现加密的效果,通过ssh隧道可以提高服务端与客户端之间通讯的安全性。
100.参照图3,示出了本发明的一种虚拟机访问实施例的创建ssh隧道的示意图;
101.如图3所示,代理服务器接收到请求后,可以从请求信息中提取出虚拟机的宿主机的hostname,然后从本地随机抽取一个未使用的端口,和该宿主机创建ssh隧道链接,vnc则监听该hostname和随机抽取的本地端口,这样在本地访问“127.0.0.1:随机端口”的情况下,即可通过隧道到达目标虚拟机的vnc端口。
102.在本发明实施例中,通过随机选取所述代理服务器的未使用的代理服务器端口;创建代理服务器端口与宿主机地址信息对应的所述宿主机的ssh隧道,以使代理服务器端口通过ssh隧道与宿主机的虚拟机地址信息对应的虚拟机的虚拟机端口进行连接,可以通过ssh隧道对代理服务器和宿主机之间的通讯进行加密,提高通讯的安全性。
103.为了使本领域的技术人员更易于理解本发明的虚拟机访问方法,以下结合图4作详细介绍,需要说明的是,图中的步骤进行了简化,与以下介绍内容并不冲突。
104.参照图4,示出了本发明一种虚拟机访问实施例的流程示意图,具体可以包括以下步骤:
105.步骤401、接收云平台终端对虚拟机的第一访问请求;所述第一访问请求包括第一请求信息,所述第一请求信息包括所述虚拟机的宿主机的宿主机地址信息;
106.步骤402、创建与所述宿主机地址信息对应的所述宿主机的ssh隧道;
107.步骤403、随机生成第一身份标识,将所述第一身份标识与所述第一请求信息组合成身份验证信息并保存到缓存中;
108.其中,第一身份标识可以是token,可以采用随机生成的uuid作为token,也可以采用其他的唯一验证方式作为token,本发明对此不作限制。
109.具体实现中,可以是代理服务器生成随机token,并且和用户标识,可以是用户名(username)、虚拟机的uuid、vmip、虚拟机的宿主机的主机域名或ip地址(hostname),以及随机选取的端口组合成身份验证信息进行缓存,并且以token作为key,一种可行的缓存格式如下所示:
110.{token:{“username”:《username》,“uuid”:《uuid》,“vmip”:《vmip》,“hostname”:《hostname》,“port”:《随机端口》}}
111.缓存的身份验证信息可以以token作为key,即一个token对应着一组身份验证信
息,在进行身份验证时,可以先验证token,当存在与token对应的身份验证信息时,就可以通过token获取到对应的身份验证信息,从其中选取一个或多个待验证的信息进行验证。
112.步骤404、将携带所述身份验证信息的访问地址信息返回所述云平台终端;
113.代理服务器在接收到云平台终端发送的访问请求后,需要返回一个访问地址(url)给云平台终端,使云平台终端可以通过该访问地址与代理服务器连接,进而与目标虚拟机进行连接通信。
114.代理服务器可以将身份验证信息和访问地址组合成访问地址信息,然后将访问地址信息返回给云平台终端,以使云平台终端跳转打开该访问地址时,携带相应的验证信息以供代理服务器进行验证。一种访问地址信息的组合方式可以是:“/vnc_lite.html?token=《token》”,其中,“/vnc_lite.html”是访问地址,“token=《token》”是身份验证信息。
115.步骤405、接收所述云平台终端针对所述访问地址信息发送第二访问请求,所述第二访问请求包括第二身份标识和第二用户标识;
116.云平台终端在接收到代理服务器返回的访问地址后,会自动跳转打开该链接,向代理服务器发送第二访问请求,并且会在访问请求中带上自身的鉴权信息,鉴权信息可以包括身份标识和用户标识。当然,鉴权信息也可以包括其他信息,具体可以是跟代理服务器返回的访问地址信息对应的信息。具体可以是在请求的headers里附带鉴权信息,headers是http请求中的头解析文件,储存有http访问请求的基本信息。代理服务器可以根据headers里面的鉴权信息解析出来的第二用户标识,和缓存的第一用户标识进行比对,比对通过后才建立链接,否则返回错误提示信息。
117.步骤406、当所述第二身份标识与所述身份验证信息中的所述第一身份标识相同时,从所述身份验证信息中获取所述第一用户标识;当所述第二用户标识与所述第一用户标识相同时,与所述云平台终端建立链接;当所述第二身份标识与所述身份验证信息中的所述第一身份标识不相同时,或当所述第二用户标识与所述第一用户标识不同时,返回错误提示信息到所述云平台终端;
118.代理服务器在接收到云平台终端的第二访问请求后,可以从其中提取出携带的鉴权信息,如可以是第二身份标识和第二用户标识。其中,第二身份标识实际上可以是从访问地址信息中提取的,即与代理服务器缓存中的身份验证信息的第一身份标识是相同的。因为身份标识是随机生成的唯一识别码,对第二身份标识进行验证,可以防止代理服务器返回的访问地址被篡改。
119.具体实现中,代理服务器先对身份标识进行验证,在第二请求中提取出第二身份标识与缓存中的第一身份标识作比较,若在缓存中没有找到与第二身份标识对应的第一身份标识,则返回错误信息给云平台终端。若在缓存中查找到了与第二身份标识对应的第一身份标识,则获取与第一身份标识对应的身份验证信息。
120.一种示例是,如代理服务器返回的访问地址信息为“/vnc_lite.html?1234=《身份验证信息a》”,其中“1234”为身份标识,“《身份验证信息a》”为与身份标识对应的身份验证信息;在验证信息时,如果第二身份标识为“1234”,则可以从缓存中查找到与之相同的身份标识,进而获取到与之对应的“《身份验证信息a》”;否则,则表示访问地址信息或第二身份标识可能被篡改,返回错误提示信息。
121.当身份标识验证通过,获取到与之对应的身份验证信息后,则可以进一步验证第
二访问请求是否来自于与第一访问请求相同的用户,防止访问地址泄露导致其他人访问虚拟机。可以验证第二访问请求中的用户名(username),也可以是验证身份验证信息中的其他信息。
122.一种示例是,如身份标识“1234”对应的身份验证信息为{1234:{“username”:《tony》,“uuid”:《uuid》,“vmip”:《vmip》,“hostname”:《hostname》,“port”:《随机端口》}};则可以获取其中的username作为验证依据,假设第二请求中的用户标识为用户名,如果该用户名为“tony”,则说明其是在第一访问请求时申请访问虚拟机的用户,验证通过;如果该用户名与身份验证信息中的用户名不一致,则返回错误提示信息。
123.当身份验证通过后,代理服务器则可以与该云平台终端建立链接,建立的链接可以是websocket链接。
124.步骤407、接收所述云平台终端发送的数据;将所述数据转发到所述代理服务器端口,以使所述代理服务器端口通过所述ssh隧道将所述数据转发到所述虚拟机端口;
125.在代理服务器与云平台终端建立链接后,可以将数据转发到代理服务器端口,该端口实际上是通过ssh隧道和宿主机上对应虚拟机的vnc端口建立链接,从而实现数据转发,用户通过云平台终端能够正常打开虚拟机的webconsole,实现对虚拟机的安全访问。
126.步骤408、以预设的间隔时间检测所述代理服务器端口与所述虚拟机之间的链接状态;
127.当所述代理服务器端口与所述虚拟机之间的链接状态为断开连接状态时,销毁所述ssh隧道,并将所述身份验证信息从所述缓存中清除。
128.在代理服务器与虚拟机的宿主机建立了链接之后,会自动开启子进程以预设的时间间隔检测该链接是否活跃,即是否有发送请求或传输数据;如当时间间隔设置为60秒时,则会每60秒检测一次该链接的状态。
129.当云平台终端断开链接后,子进程检测到代理服务器端口与虚拟机之间的链接没有了数据传输,则会销毁创建的ssh隧道,回收ssh隧道的资源,并将缓存中的身份验证信息清除,确保身份验证信息只在一次链接中有效。
130.在本发明实施例中,通过使用ssh隧道的方式来打通虚拟机的数据流,由于ssh隧道在进行数据流传输前已经确定虚拟机的vnc端口,可以避免开放所有虚拟机的vnc端口,代理服务器在本地选取端口,所以虚拟机只需要监听127.0.0.1的地址即可;对访问请求进行鉴权,确保了访问地址只可以申请人使用,避免了访问地址泄露的风险,由于访问地址携带了身份验证信息,在链接断开后,自动清除身份验证信息,确保了访问地址信息只有一次性使用,回收资源,节省了系统资源,提升了虚拟机访问的安全性。
131.需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
132.参照图5,示出了本发明的一种虚拟机访问装置实施例的结构框图,本发明实施例具体可以包括如下模块:
133.访问请求接收模块501、用于接收云平台终端对虚拟机的第一访问请求;所述第一
访问请求包括第一请求信息,所述第一请求信息包括所述虚拟机的宿主机的宿主机地址信息;
134.ssh隧道创建模块502、用于创建与所述宿主机地址信息对应的所述宿主机的ssh隧道;
135.访问地址信息返回模块503、用于向所述云平台终端返回所述代理服务器的访问地址信息,以使所述云平台终端通过所述访问地址信息访问所述代理服务器,进而所述代理服务器通过所述ssh隧道访问所述宿主机的所述虚拟机。
136.在一示例性实施例中,所述ssh隧道创建模块502,用于随机选取所述代理服务器的未使用的代理服务器端口;创建所述代理服务器端口与所述宿主机地址信息对应的所述宿主机的ssh隧道,以使所述代理服务器端口通过所述ssh隧道与所述宿主机的所述虚拟机地址信息对应的所述虚拟机的虚拟机端口进行连接。
137.在一示例性实施例中,所述第一请求信息还包括第一用户标识,所述宿主机地址信息包括所述虚拟机的宿主机的主机域名、虚拟机的宿主机的ip地址,所述虚拟机地址信息包括所述虚拟机的通用唯一识别码和所述虚拟机的ip地址。
138.在一示例性实施例中,链接建立模块,用于随机生成第一身份标识,将所述第一身份标识与所述第一请求信息组合成身份验证信息并保存到缓存中;将携带所述身份验证信息的访问地址信息返回所述云平台终端;接收所述云平台终端针对所述访问地址信息发送第二访问请求,所述第二访问请求包括第二身份标识和第二用户标识;当所述第二身份标识与所述身份验证信息中的所述第一身份标识相同时,从所述身份验证信息中获取所述第一用户标识;当所述第二用户标识与所述第一用户标识相同时,与所述云平台终端建立链接。
139.在一示例性实施例中,所述链接建立模块,用于当所述第二身份标识与所述身份验证信息中的所述第一身份标识不相同时,或当所述第二用户标识与所述第一用户标识不同时,返回错误提示信息到所述云平台终端。
140.在一示例性实施例中,数据传输模块,用于当接收所述云平台终端发送的数据;将所述数据转发到所述代理服务器端口,以使所述代理服务器端口通过所述ssh隧道将所述数据转发到所述虚拟机端口。
141.在一示例性实施例中,链接状态检测模块,用于以预设的间隔时间检测所述代理服务器端口与所述虚拟机之间的链接状态;当所述代理服务器端口与所述虚拟机之间的链接状态为断开连接状态时,销毁所述ssh隧道,并将所述身份验证信息从所述缓存中清除。
142.综上,在本发明实施例中,接收云平台终端对虚拟机的第一访问请求,创建与第一访问请求中的宿主机地址信息对应的宿主机的ssh隧道,使得在向云平台终端返回代理服务器的访问地址信息后,云平台终端可以通过访问地址信息访问代理服务器,进而代理服务器通过ssh隧道访问宿主机的虚拟机。本发明实施例通过使用ssh隧道的方式来传输虚拟机的数据流,由于ssh隧道在进行数据流传输前已经确定虚拟机的vnc端口,从而可以避免开放所有虚拟机的vnc端口,提升了虚拟机访问的安全性。
143.对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
144.本发明实施例公开了一种电子设备,包括处理器、存储器及存储在所述存储器上
并能够在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上虚拟机访问方法实施例所述的步骤。
145.本发明实施例公开了一种计算机可读存储介质,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现如上虚拟机访问方法实施例所述的步骤。
146.本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
147.本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
148.本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
149.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
150.这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
151.尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
152.最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
153.以上对本发明所提供的一种虚拟机访问方法、一种虚拟机访问装置、电子设备和存储介质,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐
述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1