CN114090296A - 一种基于ssh协议的远程命令执行方法及装置 - Google Patents
一种基于ssh协议的远程命令执行方法及装置 Download PDFInfo
- Publication number
- CN114090296A CN114090296A CN202111403973.6A CN202111403973A CN114090296A CN 114090296 A CN114090296 A CN 114090296A CN 202111403973 A CN202111403973 A CN 202111403973A CN 114090296 A CN114090296 A CN 114090296A
- Authority
- CN
- China
- Prior art keywords
- command
- remote command
- ssh
- ascii code
- ascii
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 60
- 238000012545 processing Methods 0.000 claims description 21
- 238000004458 analytical method Methods 0.000 claims description 11
- 238000004590 computer program Methods 0.000 claims description 9
- 238000003860 storage Methods 0.000 claims description 6
- 238000005516 engineering process Methods 0.000 abstract description 6
- 238000001514 detection method Methods 0.000 abstract description 3
- 230000000694 effects Effects 0.000 abstract description 3
- 239000003795 chemical substances by application Substances 0.000 description 48
- 238000010586 diagram Methods 0.000 description 20
- 230000008569 process Effects 0.000 description 16
- 238000012986 modification Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 230000006870 function Effects 0.000 description 4
- 238000003825 pressing Methods 0.000 description 4
- 238000012360 testing method Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 2
- 238000011022 operating instruction Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 229910002056 binary alloy Inorganic materials 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明涉及金融科技(Fintech)领域,公开一种基于SSH协议的远程命令执行方法及装置,基于SSH客户端输出的任一按键指令,获取SSH服务端对所述按键指令进行解析的ASCII码;基于所述SSH服务端返回的各ASCII码确定出所述SSH客户端输出的远程命令;在确定所述远程命令符合运行要求后,将所述远程命令发送至所述SSH服务端。该方式实现了一种在命令未被执行、即可对命令进行安全性检测的效果,从而对一些存在危险性的命令进行拦截,保障了SSH服务端的安全性。
Description
技术领域
本申请实施例涉及金融科技(Fintech)领域,尤其涉及一种基于SSH协议的远程命令执行方法及装置。
背景技术
随着计算机技术的发展,越来越多的技术(例如:云计算、大数据或区块链)应用在金融领域,传统金融业正在逐步向金融科技转变。在大数据技术的背景下,银行业基于SSH客户端,即一种使用Secure Shell协议连接到远程计算机的软件程序,可以实现对海量数据的高效管理。例如当用户在SSH客户端上输入一命令,并在他按下enter键后,SSH客户端便可以发送该命令到服务器上执行,比如可以是查看文件的ls命令、删除文件的rm命令等。
然而,以上描述的命令执行的过程,却并没有对命令做出安全性的判断。
比如:
1、该命令是否会造成对服务器资源的过高消耗,将是无法得知的。比如,在Kubernetes中,其对资源的限制很严格,用户输入的不当命令很容易造成OOM(Out ofMemory,内存溢出);
2、该命令是否为高危操作的命令,也将是无法得知的。比如,rm/这一命令指示删掉所有服务器上的文件。
对此,目前的做法是通过捕获用户的键盘输入,在发送到服务器中执行之前校验命令是否合法,也即是否存在危险性。但该方法具有如下缺陷:
仅可以获取到用户输入的内容,却并不能捕获自动补全、快捷输入等内容,也即无法解析复杂的控制指令,比如ctrl+a组合按键指示跳转到上一个字符,向上按键指示返回上一条命令、tab按键指示自动补全,这将导致对用户输入命令解析的不够准确,那么基于不准确的命令进行合法性的校验,也必然无法保证待执行命令的绝对安全性。
因此,目前亟需一种准确地判断用户输入的待执行命令的安全性的方案。
发明内容
本申请提供一种基于SSH协议的远程命令执行方法及装置,用于对用户在SSH客户端上输入的远程命令进行安全性的校验。
第一方面,本申请实施例提供一种基于SSH协议的远程命令执行方法,该方法包括:基于SSH客户端输出的任一按键指令,获取SSH服务端对所述按键指令进行解析的ASCII码;基于所述SSH服务端返回的各ASCII码确定出所述SSH客户端输出的远程命令;在确定所述远程命令符合运行要求后,将所述远程命令发送至所述SSH服务端。
上述方案中,对于用户在SSH客户端上输入命令以远程控制SSH服务端进行工作的场景,通过在SSH客户端与SSH服务端之间增加一个代理,通过代理捕获SSH服务端对用户在SSH客户端上输入的任一按键指令进行解析而得到的ASCII码,从而代理可以确定用户真实想要输出的远程命令,当且仅当所解析出的远程命令符合运行要求后,代理可以发送该远程命令到SSH服务端以进行命令的执行。该方案中代理在确定SSH客户端输出的远程命令时,代理通过缓存每一个被解析出来的可见字符,并在其(指代理)解析到控制字符的时候,可按照控制字符的处理逻辑来对已经被解析出来的可见字符进行相应调整,以最终调整到用户真实想要输出的命令,即远程命令,那么在用户真实想要传递出的命令符合运行要求后,也即说明该远程命令是安全的,也就表明SSH服务端是能够对该命令进行执行的,因而代理可将该远程命令发送给SSH服务端、以由其进行执行。该方式实现了一种在命令未被执行、即可对命令进行安全性检测的效果,从而对一些存在危险性的命令进行拦截,保障了SSH服务端的安全性。
在一种可能实现的方法中,所述获取SSH服务端对所述按键指令进行解析的ASCII码之后,还包括:缓存任一按键指令对应的ASCII码;所述基于所述SSH服务端返回的各ASCII码确定出所述SSH客户端输出的远程命令,包括:在解析得到启动运行的ASCII码后,从缓存中获取在所述启动运行的ASCII码之前的各ASCII码;对所述各ASCII码进行解析,得到所述SSH客户端输出的远程命令。
上述方案中,代理在捕获SSH服务端对用户在SSH客户端上输入的任一按键指令进行解析而得到的ASCII码时,一种方式是,缓存任一按键对应的ASCII码,直到代理在获取到用户输入的一按键对应的ASCII码指示启动运行命令,则代理可以从缓存中获取到该ASCII码之前的各ASCII码,如此代理通过对各ASCII码的解析,就可以得到用户真实想要输入的远程命令。该方式中代理通过捕获SSH服务端对用户在SSH客户端上输入的任一按键指令进行解析而得到的ASCII码,然后对ASCII码进行解析,就可以获取到用户真实想要输入的命令,提升了命令执行过程中的安全性。
在一种可能实现的方法中,所述获取SSH服务端对所述按键指令进行解析的ASCII码,包括:在所述ASCII码指示可见字符时,缓存所述ASCII码对应的可见字符;在所述ASCII码指示控制字符时,根据所述ASCII码对应的控制字符的处理逻辑对缓存中的各可见字符进行操作,更新缓存中的各可见字符;基于所述SSH服务端返回的各ASCII码确定出所述SSH客户端输出的远程命令,包括:将缓存中的各可见字符确定为所述SSH客户端输出的远程命令。
上述方案中,代理在捕获SSH服务端对用户在SSH客户端上输入的任一按键指令进行解析而得到的ASCII码时,一种方式是,在获取一按键对应的ASCII码的时候,代理可直接判断该ASCII码是否指示可见字符,如果是的话,则可以直接缓存该ASCII码对应的可见字符,如果不是的话,则表示是控制字符,控制字符的含义指的是对当前已被缓存过的一些可见字符开展相关的快捷操作,那么在ASCII码指示控制字符时,代理将可以根据当前控制字符的处理逻辑而对已经缓存好的各可见字符进行相应处理,该种边获取SSH服务端返回的ASCII码、边解析该ASCII码所表达的含义方式,同样可以得到用户真实想要输入的远程命令。该方式中代理通过捕获SSH服务端对用户在SSH客户端上输入的任一按键指令进行解析而得到的ASCII码,然后对ASCII码进行解析,就可以获取到用户真实想要输入的命令,提升了命令执行过程中的安全性。
在一种可能实现的方法中,所述对所述各ASCII码进行解析,得到所述SSH客户端输出的远程命令,包括:针对所述各ASCII码中的任一个ASCII码,在所述ASCII码指示可见字符时,保留所述ASCII码对应的可见字符;在所述ASCII码指示控制字符时,根据所述ASCII码对应的控制字符的处理逻辑对缓存中的各可见字符进行操作,更新缓存中的各可见字符;在对所述各ASCII码均解析后,得到所述SSH客户端输出的远程命令。
上述方案中,代理在捕获SSH服务端对用户在SSH客户端上输入的任一按键指令进行解析而得到的ASCII码时,通过缓存任一按键对应的ASCII码,直到代理在获取到用户输入的一按键对应的ASCII码指示启动运行命令时,代理通过从缓存中获取到该ASCII码之前的各ASCII码,接着,针对各ASCII码,代理通过遍历各ASCII码,其中针对各ASCII码中的任一ASCII码,代理可判断该ASCII码是否指示可见字符,如果是的话,则可以缓存该ASCII码对应的可见字符,如果不是的话,则表示是控制字符,控制字符的含义指的是对当前已被缓存过的一些可见字符开展相关的快捷操作,那么在该ASCII码指示控制字符时,代理将可以根据当前控制字符的处理逻辑而对已经缓存好的各可见字符进行相应处理。
在一种可能实现的方法中,所述确定所述远程命令符合运行要求,包括:按抽象语法树分析所述远程命令,得到所述远程命令中的各子命令;针对所述远程命令中的各子命令,若确定存在至少一个子命令命中预设的不可执行命令,则确定所述远程命令不符合运行要求。
上述方案中,代理在捕获SSH服务端对用户在SSH客户端上输入的任一按键指令进行解析而得到的ASCII码后、可生成用户真实想要输出给SSH服务端的命令,即远程命令,接着通过对远程命令进行抽象语法树的分析,可以得到远程命令中的各子命令,最后通过将各子命令与预设的不可执行命令进行匹配,当发现存在至少一个子命令符合了预设的不可执行命令的范畴,则可以确定该远程命令并不符合运行要求,从而代理并不会将该远程命令发送给SSH服务端以由其进行执行,而是替换为提示信息并发送给SSH服务端,以由SSH服务端控制SSH客户端向用户展示该远程命令存在风险性,以便用户及时调整需要输出的远程命令,保证了SSH服务端在运行期间的安全性。
在一种可能实现的方法中,所述在确定所述远程命令符合运行要求后,将所述远程命令发送至所述SSH服务端,包括:针对所述远程命令中的各子命令,若确定所述各子命令均未命中预设的不可执行命令,则确定所述远程命令是否指示更新命令的运行环境;若确定所述远程命令指示更新命令的运行环境,则在更新所述远程命令的运行环境后,将所述远程命令发送至所述SSH服务端。
上述方案中,代理在捕获SSH服务端对用户在SSH客户端上输入的任一按键指令进行解析而得到的ASCII码后、可生成用户真实想要输出给SSH服务端的命令,即远程命令,接着通过对远程命令进行抽象语法树的分析,可以得到远程命令中的各子命令,最后通过将各子命令与预设的不可执行命令进行匹配,当发现远程命令中的各子命令均未命中预设的不可执行命令的范畴,则可以确定该远程命令符合运行要求;不过此时仍需要确认该远程命令执行的环境是否已经发生改变,如果确定发生改变,则代理可以在将远程命令的执行环境更新为原环境后,再将该远程命令发送给SSH服务端,以由其进行执行。该方式保证了远程命令在SSH服务端上可被正确执行,减少了命令执行失败的几率。
在一种可能实现的方法中,若确定所述远程命令未指示更新命令的运行环境,则将所述远程命令发送至所述SSH服务端。
第二方面,本申请实施例提供一种基于SSH协议的远程命令执行装置,该装置包括:获取单元,用于基于SSH客户端输出的任一按键指令,获取SSH服务端对所述按键指令进行解析的ASCII码;远程命令确定单元,用于基于所述SSH服务端返回的各ASCII码确定出所述SSH客户端输出的远程命令;发送单元,用于在确定所述远程命令符合运行要求后,将所述远程命令发送至所述SSH服务端。
第三方面,本申请实施例提供了一种计算设备,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行如第一方面任一实现方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行如第一方面任一实现方法。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术的一种远程命令执行的系统架构示意图;
图2为本申请实施例提供的一种基于SSH协议的远程命令执行方法的示意图;
图3为本申请实施例提供的一种抽象语法树的示意图;
图4为本申请实施例提供的一种通过抽象语法树解析命令的示意图;
图5为本申请实施例提供的一种确定远程命令是否可执行的流程示意图;
图6为本申请实施例提供的一种基于SSH协议的远程命令执行装置的示意图;
图7为本申请实施例提供的一种计算设备的示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
如图1所示,为现有技术的一种远程命令执行的系统架构示意图。其中包括客户端110、服务端120和代理服务器(以下简称代理)130。作为示例,客户端110和服务端120为基于SSH协议进行命令传输的SSH客户端和SSH服务端,代理130可以为独立的服务器,也可以为隶属于客户端110上的一个处理模块或者隶属于服务端120上的一个处理模块。其中,客户端110可以携带有键盘和显示器,键盘用于接收用户输入,显示器用于向用户展示输入的命令以及服务端120针对用户输入的命令而返回的数据,代理130用于拦截、捕获用户在客户端110的键盘上输入的内容,并分析用户输入的远程命令的安全性,并在确认远程命令安全后,向服务端120发送远程命令、以使服务端120对远程命令进行执行,服务端120用于对用户发送的远程命令进行响应并向用户返回远程命令指示的数据。
然而,上文描述的SSH服务端对SSH客户端发出的远程命令进行执行的过程,由于当前的架设于SSH客户端与SSH服务端之间的代理仅可以获取到用户的输入内容,而无法捕获用户输入的自动补全等快捷按键指示的内容。因此,当前的代理在对用户输入的含有快捷按键的远程命令无法准确进行安全性的校验,这将使得SSH服务端在执行该类远程命令时容易遭受到损害。
针对上述技术问题,本申请实施例提供一种基于SSH协议的远程命令执行方法。如图2所示,为本申请实施例提供的一种基于SSH协议的远程命令执行方法的示意图,该方法包括以下步骤:
步骤201,基于SSH客户端输出的任一按键指令,获取SSH服务端对所述按键指令进行解析的ASCII码。
结合图1所示的架构,在本步骤中,图1中所示的架设于SSH客户端与SSH服务端之间的代理130,可以捕获SSH服务端对用户在SSH客户端上输入的任一按键指令进行解析而得到的ASCII码。
其中,ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)码使用指定的7位或8位二进制数组合来表示128或256种可能的字符。标准ASCII码也叫基础ASCII码,使用7位二进制数来表示所有的大写和小写字母,数字0到9、标点符号,以及在美式英语中使用的特殊控制字符。可以理解的是,键盘上的任一个按键(包括单一按键和组合按键)可以对应到一个唯一的ASCII码。
步骤202,基于所述SSH服务端返回的各ASCII码确定出所述SSH客户端输出的远程命令。
在本步骤中,代理在获取到SSH服务端返回的各ASCII码后,可以基于标准的ASCII码表,关于各ASCII码而解析出用户真实想要输出的远程命令。
步骤203,在确定所述远程命令符合运行要求后,将所述远程命令发送至所述SSH服务端。
在本步骤中,当代理获取到用户真实想要输出的远程命令后,可以判断该远程命令是否符合运行要求,并在确定符合运行要求时,可将远程命令发送至SSH服务端,以由SSH服务端对远程命令进行执行。
上述方案中,对于用户在SSH客户端上输入命令以远程控制SSH服务端进行工作的场景,通过在SSH客户端与SSH服务端之间增加一个代理,通过代理捕获SSH服务端对用户在SSH客户端上输入的任一按键指令进行解析而得到的ASCII码,从而代理可以确定用户真实想要输出的远程命令,当且仅当所解析出的远程命令符合运行要求后,代理可以发送该远程命令到SSH服务端以进行命令的执行。该方案中代理在确定SSH客户端输出的远程命令时,代理通过缓存每一个被解析出来的可见字符,并在其(指代理)解析到控制字符的时候,可按照控制字符的处理逻辑来对已经被解析出来的可见字符进行相应调整,以最终调整到用户真实想要输出的命令,即远程命令,那么在用户真实想要传递出的命令符合运行要求后,也即说明该远程命令是安全的,也就表明SSH服务端是能够对该命令进行执行的,因而代理可将该远程命令发送给SSH服务端、以由其进行执行。该方式实现了一种在命令未被执行、即可对命令进行安全性检测的效果,从而对一些存在危险性的命令进行拦截,保障了SSH服务端的安全性。
以下将结合示例分别对上述一些步骤进行详细说明。
在上述步骤201的一个实施中,所述获取SSH服务端对所述按键指令进行解析的ASCII码之后,还包括:缓存任一按键指令对应的ASCII码;以及在上述步骤202的一个实施中,所述基于所述SSH服务端返回的各ASCII码确定出所述SSH客户端输出的远程命令,包括:在解析得到启动运行的ASCII码后,从缓存中获取在所述启动运行的ASCII码之前的各ASCII码;对所述各ASCII码进行解析,得到所述SSH客户端输出的远程命令。
用户在SSH客户端的键盘中敲下的所有的内容都会映射到一个ASCII码。
其中,ASCII码可分为两类:
1、打印字符,也叫可见字符,一般为数字按键(如1、2、3按键),字母按键(a、b、c按键)等指示的内容。当用户按下诸如此类的按键时,按键指示的内容可以在SSH客户端的显示器中看到。
2、控制字符,也叫不可见字符,一般为控制按键(ctrl、tab、shift按键),组合按键(ctrl-a,ctrl-c)。
本申请实施例中通过架设于SSH客户端和SSH服务端之间的代理,可以获取到SSH服务端针对用户的输入按键进行解析而得到ASCII码,基于标准的ASCII码表在对ASCII码进行转换后,从而就可以获取到用户真实想要输入的远程命令。
例如,用户可通过在SSH客户端的键盘中输入命令“ls-al”、并在按下“enter”键后,来实现控制SSH服务端输出当前目录下的文件列表并通过SSH客户端中的显示器向用户进行展示的目的。但是,用户在输入命令的过程中,有可能出现漏输入字母的问题,比如假设用户在输入“ls-al”命令的时候漏掉了“a”,那么此时用户可以通过按下组合按键“ctrl-a”,并在按下组合按键“ctrl-a”之后继续按下“a”按键,那么就可以实现对“ls-l”中漏输入的“a”进行补充。因此,用户所输入的内容依次是“ls-l ctrl-a a”以及“enter”键。如此,在代理还未接收到SSH服务端返回的“enter”键所对应的ASCII码之前,代理可以按照用户按下按键时间的先后顺序、一一缓存下SSH服务端关于字母“l”、字母“s”、空格、“-”、字母“l”、空格、“ctrl-a”、空格、字母“a”各按键分别对应的ASCII码,当代理接收到SSH服务端返回的“enter”键所对应的ASCII码时,将可以对“enter”键按下之前的各按键所对应的ASCII码进行解析,从而获取到用户输入的远程命令。比如,代理在对字母“l”、字母“s”、空格、“-”、字母“l”、空格、“ctrl-a”、空格、字母“a”各按键分别对应的ASCII码进行解析后,将可以确定用户输入的命令为“ls-al”命令。
在本申请的某些实施中,所述对所述各ASCII码进行解析,得到所述SSH客户端输出的远程命令,包括:针对所述各ASCII码中的任一个ASCII码,在所述ASCII码指示可见字符时,保留所述ASCII码对应的可见字符;在所述ASCII码指示控制字符时,根据所述ASCII码对应的控制字符的处理逻辑对缓存中的各可见字符进行操作,更新缓存中的各可见字符;在对所述各ASCII码均解析后,得到所述SSH客户端输出的远程命令。
当用户键入可见字符时,SSH服务端返回的是该可见字符对应的ASCII码,比如键入A,返回的ASCII码是0x41(十六进制下);若用户键入的是控制字符,则SSH服务端返回的为组合字符,所有的组合字符都是以逃逸字符开始,逃逸字符为多个ASCII串,均以ESC(0x1B)开始。
假设代理收到SSH服务端返回的ASCII串为S,那么在轮询S中所有的字符时,可对字符进行缓存,结构为两部分:
a)可见字符数组,也就是ASCII的列表,都为可见字符;
b)数组游标,表示当前操作的缓存坐标。
代理对SSH服务端返回的ASCII串进行解析时,包括对控制字符、可见字符、逃逸字符的解析。解析流程如下:
对控制字符解析的步骤:
a)第一步判断字符是否为控制字符,由于ASCII的特性,当ASCII在(0x20,0177)之间代表控制字符,若为可见字符,则直接加入到缓存中,否则进入到第二步;
b)第二步判断是否删除键,删除键的ASCII为BS(0x08),是的话则删除游标所处位置的前一个字符;
c)第三步判断是否换行,若为换行,则代表新起一行,在缓存中增加换行,同时更新游标为当前终端的宽度加上老的游标位置;
d)第四步判断是否跳转到行首,若为行首则移动游标到0位置;
e)第五步判断是否为逃逸字符,逃逸字符的第一个字符为ESC,是则进入到逃逸字符的解析逻辑,否则代表控制字符解析结束,继续解析下一个字符。
对逃逸字符解析的步骤:
a)第一步判断是否为方向键,对应的为A(UP)、B(DOWN)、C(Forward)、D(Backward),比如我们常见的有向左,向右,相对应的我们需要移动当前游标,若为向上和向下,则需要退出逃逸字符解析,根据下一个字符判断操作;
b)第二步判断是否为测试字符,测试字符表示为#,直接加入缓存即可;
c)第三步判断是否为清空缓存,同时重置游标;
d)第四步判断是否为行操作,是则跳转到上、下行,并且更新游标。
通过以上解析流程,代理可以得到最终的可见字符,即用户输入的远程命令,并且保存在缓存中。
例如,对于上述“ls-al”命令,假设用户依次正确输入了“1”、“s”、空格、“-”、“a”、“l”,那么在用户输入第一个“l”的时候,代理可以从SSH服务端处获取到“l”对应的ASCII码108(二进制下),由于108并不同于“enter”键对应的ASCII码13,因此,代理可以在缓存中存入ASCII码108;基于此,对于用户输入的“ls-al”命令,代理一一缓存下来的ASCII码串为“108 115 32 45 97 108”,其中,ASCII码32表示空格对应的ASCII码,ASCII码45表示“-”对应的ASCII码。由于该“108 115 32 45 97 108”ASCII码串中并未涉及控制字符对应的ASCII码,因此代理可以在接收到用户输入“enter”键后,将该“108 115 32 45 97 108”ASCII码转换为“ls-al”这一远程命令。
设在用户输入“ls-al”这一远程命令并按下“enter”键之后,用户又依次输入了“p”、“s”、空格、“-”和“0”,但是由于用户输入的错误,误将“e”输入成了“0”,因此用户通过按下“delete”键,并继续输入了“e”和“f”;接着用户通过按下键盘当中的向上键后,SSH客户端的显示器中可以显示出“ls-al”这一远程命令。该过程中当中,代理接收到的SSH服务端返回的ASCII码串为“112 115 32 45 48 8 27 91 75 101 102 8 8 8 8 8 8 108 11532 45 97 108”。
对ASCII码串为“112 115 32 45 48 8 27 91 75 101 102 8 8 8 8 8 8 108 11532 45 97 108”的解析如下:
首先输入的是ps-0,但是由于输入错误,其实是希望输入ps-e的,因此键入了8,并且携带了逃逸字符27 91 75,但因为没有后续指令逃逸字符解析不会有响应。
继续输入ef,当输入完之后并没有按下“enter”键,此时的ASCII集合为112 11532 45 48 8 27 91 75 101 102。
但是由于某些原因,用户希望继续上一个命令执行,则用户通过键入向上键,执行上一条指令,服务器返回8 8 8 8 8 8 108 115 32 45 97 108。
其中前面6个8表示删除6个字符,刚好,由于目前的内容为"ps-ef",字符数量为0,然后108 115 32 45 97 108的显示内容为ls–al。
在上述步骤201的一个实施中,所述获取SSH服务端对所述按键指令进行解析的ASCII码,包括:在所述ASCII码指示可见字符时,缓存所述ASCII码对应的可见字符;在所述ASCII码指示控制字符时,根据所述ASCII码对应的控制字符的处理逻辑对缓存中的各可见字符进行操作,更新缓存中的各可见字符;以及,在上述步骤202的一个实施中,基于所述SSH服务端返回的各ASCII码确定出所述SSH客户端输出的远程命令,包括:将缓存中的各可见字符确定为所述SSH客户端输出的远程命令。
上述方案中,代理在捕获SSH服务端对用户在SSH客户端上输入的任一按键指令进行解析而得到的ASCII码时,一种方式是,在获取一按键对应的ASCII码的时候,代理可直接判断该ASCII码是否指示可见字符,如果是的话,则可以直接缓存该ASCII码对应的可见字符,如果不是的话,则表示是控制字符,控制字符的含义指的是对当前已被缓存过的一些可见字符开展相关的快捷操作,那么在ASCII码指示控制字符时,代理将可以根据当前控制字符的处理逻辑而对已经缓存好的各可见字符进行相应处理,该种边获取SSH服务端返回的ASCII码、边解析该ASCII码所表达的含义方式,同样可以得到用户真实想要输入的远程命令。该方式中代理通过捕获SSH服务端对用户在SSH客户端上输入的任一按键指令进行解析而得到的ASCII码,然后对ASCII码进行解析,就可以获取到用户真实想要输入的命令,提升了命令执行过程中的安全性。
在上述步骤203的一个实施中,所述确定所述远程命令符合运行要求,包括:按抽象语法树分析所述远程命令,得到所述远程命令中的各子命令;针对所述远程命令中的各子命令,若确定存在至少一个子命令命中预设的不可执行命令,则确定所述远程命令不符合运行要求。
例如,linux命令是由多个可见字符串组成的,主要由3部分组成:
(1)、目标命令;
(2)、命令携带参数;
(3)、命令目标。
比如ls–al/data/app,其中ls为目标命令,参数为-a–l,目标为/data/app。所有的命令都可以由抽象语法树(Abstract Syntax Tree,AST)表达,主要包括:
1、父节点,多为操作符,语句等,常见的有管道(Pipe);
2、子节点,主要由命令和参数组成。
如图3所示,为本申请实施例提供的一种抽象语法树的示意图,其中图3所示的抽象语法树是命令“ps–ef|grep app|tail-1000”对应的抽象语法树。如图4所示,为本申请实施例提供的一种通过抽象语法树解析命令的示意图,其中基于抽象语法树解析命令的过程中,包括以下几个步骤:
步骤1、将命令转换成为语法树;
步骤2、步递归解析语法树的每一个节点,若节点为控制符,表示其子节点为表达式,需要拆分,否则进行第三步;
步骤3、判断节点是否为表达式,是则表示当前节点为一个命令,直接解析命令和参数(所有参数都是以-开头),解析完继续判断其他节点。
以上语法树为例,命令为ps–ef|grep app|tail-1000,最终得到的命令详情如下:
目标命令:ps grep tail
参数:-ef app-1000
在上述步骤203的一个实施中,所述在确定所述远程命令符合运行要求后,将所述远程命令发送至所述SSH服务端,包括:针对所述远程命令中的各子命令,若确定所述各子命令均未命中预设的不可执行命令,则确定所述远程命令是否指示更新命令的运行环境;若确定所述远程命令指示更新命令的运行环境,则在更新所述远程命令的运行环境后,将所述远程命令发送至所述SSH服务端。
在本申请的某些实施中,若确定所述远程命令未指示更新命令的运行环境,则将所述远程命令发送至所述SSH服务端。
如图5所示,为本申请实施例提供的一种确定远程命令是否可执行的流程示意图。
结合图5,设有两个命令,分别为ps–ef|grep app|tail-1000和ls-al/data/app,并预设ps命令是危险命令,即不可执行命令,不允许执行,ls是非危险命令,即可执行命令,允许执行。
首先,代理判断用户输入的内容是否为“enter”键,若是,则表示用户命令键入完毕,希望发送到服务器中执行;若否,则直接发送给服务器。比如,服务器可以为SSH服务端。
接着,在代理将输入用户输入的内容发送到服务器后,代理可以从缓存中读取到的服务器返回的内容,即ASCII码,在转换为远程命令并进行抽象语法数据的解析后,得到远程命令的各子命令。
最后,对于远程命令中的各子命令与预设的可执行命令进行匹配,若确定远程命令中存在至少一个子命令命中预设的不可执行命令,则表示远程命令不允许执行,因此代理需要拦截命令、并替换命令为提示信息,随后发送到服务器中执行,从而通过SSH客户端的显示器向用户发送提示信息;若确定远程命令中所有的各子命令均未命中预设的不可执行命令,则需要继续判断该远程命令是否为指示更新命令的运行环境的命令,如是否为cd命令(cd命令表示替换目录),如果确认远程命令为指示更新命令的运行环境的命令,则在更新远程命令的运行环境后,即更新上下文,将远程命令发送到服务器中进行执行,如果确认远程命令并非为指示更新命令的运行环境的命令,则可以将直接将远程命令发送至服务器中进行执行。
基于图5所示的确定用户键入的命令是否可以执行的判断流程,当在对ps–ef|grep app|tail-1000命令进行是否可以发送服务器执行的判断时,由于ps–ef|grep app|tail-1000命令中的子命令ps命中了不可执行命令,因而ps–ef|grep app|tail-1000命令无需发送至服务器中执行;在对ls-al/data/app命令进行是否可以发送服务器执行的判断时,由于ls-al/data/app命令中的子命令ls并未命中不可执行命令,因而ls-al/data/app可通过代理发送到服务器中进行执行。
基于同样的构思,本申请实施例提供一种基于SSH协议的远程命令执行装置,如图6所示,为本申请实施例提供的一种基于SSH协议的远程命令执行装置的示意图,该装置包括获取单元601、远程命令确定单元602和发送单元603;
获取单元601,用于基于SSH客户端输出的任一按键指令,获取SSH服务端对所述按键指令进行解析的ASCII码;
远程命令确定单元602,用于基于所述SSH服务端返回的各ASCII码确定出所述SSH客户端输出的远程命令;
发送单元603,用于在确定所述远程命令符合运行要求后,将所述远程命令发送至所述SSH服务端。
进一步的,对于该装置,还包括缓存单元604;缓存单元604,用于缓存任一按键指令对应的ASCII码;远程命令确定单元602,具体用于:在解析得到启动运行的ASCII码后,从缓存中获取在所述启动运行的ASCII码之前的各ASCII码;对所述各ASCII码进行解析,得到所述SSH客户端输出的远程命令。
进一步的,对于该装置,获取单元601,具体用于:在所述ASCII码指示可见字符时,缓存所述ASCII码对应的可见字符;在所述ASCII码指示控制字符时,根据所述ASCII码对应的控制字符的处理逻辑对缓存中的各可见字符进行操作,更新缓存中的各可见字符;远程命令确定单元,具体用于:将缓存中的各可见字符确定为所述SSH客户端输出的远程命令。
进一步的,对于该装置,远程命令确定单元602,还用于:针对所述各ASCII码中的任一个ASCII码,在所述ASCII码指示可见字符时,保留所述ASCII码对应的可见字符;在所述ASCII码指示控制字符时,根据所述ASCII码对应的控制字符的处理逻辑对缓存中的各可见字符进行操作,更新缓存中的各可见字符;在对所述各ASCII码均解析后,得到所述SSH客户端输出的远程命令。
进一步的,对于该装置,还包括合法性判断单元605;合法性判断单元605,用于按抽象语法树分析所述远程命令,得到所述远程命令中的各子命令;针对所述远程命令中的各子命令,若确定存在至少一个子命令命中预设的不可执行命令,则确定所述远程命令不符合运行要求。
进一步的,对于该装置,发送单元603,具体用于:针对所述远程命令中的各子命令,若确定所述各子命令均未命中预设的不可执行命令,则确定所述远程命令是否指示更新命令的运行环境;若确定所述远程命令指示更新命令的运行环境,则在更新所述远程命令的运行环境后,将所述远程命令发送至所述SSH服务端。
进一步的,对于该装置,发送单元603,还用于:若确定所述远程命令未指示更新命令的运行环境,则将所述远程命令发送至所述SSH服务端。
本申请实施例还提供了一种计算设备,该计算设备具体可以为桌面计算机、便携式计算机、智能手机、平板电脑、个人数字助理(Personal Digital Assistant,PDA)等。该计算设备可以包括中央处理器(Center Processing Unit,CPU)、存储器、输入/输出设备等,输入设备可以包括键盘、鼠标、触摸屏等,输出设备可以包括显示设备,如液晶显示器(Liquid Crystal Display,LCD)、阴极射线管(Cathode Ray Tube,CRT)等。
存储器,可以包括只读存储器(ROM)和随机存取存储器(RAM),并向处理器提供存储器中存储的程序指令和数据。在本申请实施例中,存储器可以用于存储基于SSH协议的远程命令执行方法的程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行基于SSH协议的远程命令执行方法。
如图7所示,为本申请实施例提供的一种计算设备的示意图,该计算设备包括:
处理器701、存储器702、收发器703、总线接口704;其中,处理器701、存储器702与收发器703之间通过总线705连接;
所述处理器701,用于读取所述存储器702中的程序,执行上述基于SSH协议的远程命令执行方法;
处理器701可以是中央处理器(central processing unit,简称CPU),网络处理器(network processor,简称NP)或者CPU和NP的组合。还可以是硬件芯片。上述硬件芯片可以是专用集成电路(application-specific integrated circuit,简称ASIC),可编程逻辑器件(programmable logic device,简称PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(complex programmable logic device,简称CPLD),现场可编程逻辑门阵列(field-programmable gate array,简称FPGA),通用阵列逻辑(generic array logic,简称GAL)或其任意组合。
所述存储器702,用于存储一个或多个可执行程序,可以存储所述处理器701在执行操作时所使用的数据。
具体地,程序可以包括程序代码,程序代码包括计算机操作指令。存储器702可以包括易失性存储器(volatile memory),例如随机存取存储器(random-access memory,简称RAM);存储器702也可以包括非易失性存储器(non-volatile memory),例如快闪存储器(flash memory),硬盘(hard disk drive,简称HDD)或固态硬盘(solid-state drive,简称SSD);存储器702还可以包括上述种类的存储器的组合。
存储器702存储了如下的元素,可执行模块或者数据结构,或者它们的子集,或者它们的扩展集:
操作指令:包括各种操作指令,用于实现各种操作。
操作系统:包括各种系统程序,用于实现各种基础业务以及处理基于硬件的任务。
总线705可以是外设部件互连标准(peripheral component interconnect,简称PCI)总线或扩展工业标准结构(extended industry standard architecture,简称EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
总线接口704可以为有线通信接入口,无线总线接口或其组合,其中,有线总线接口例如可以为以太网接口。以太网接口可以是光接口,电接口或其组合。无线总线接口可以为WLAN接口。
本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行基于SSH协议的远程命令执行方法。
本领域内的技术人员应明白,本申请的实施例可提供为方法、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (10)
1.一种基于SSH协议的远程命令执行方法,其特征在于,包括:
基于SSH客户端输出的任一按键指令,获取SSH服务端对所述按键指令进行解析的ASCII码;
基于所述SSH服务端返回的各ASCII码确定出所述SSH客户端输出的远程命令;
在确定所述远程命令符合运行要求后,将所述远程命令发送至所述SSH服务端。
2.如权利要求1所述的方法,其特征在于,
所述获取SSH服务端对所述按键指令进行解析的ASCII码之后,还包括:
缓存任一按键指令对应的ASCII码;
所述基于所述SSH服务端返回的各ASCII码确定出所述SSH客户端输出的远程命令,包括:
在解析得到启动运行的ASCII码后,从缓存中获取在所述启动运行的ASCII码之前的各ASCII码;
对所述各ASCII码进行解析,得到所述SSH客户端输出的远程命令。
3.如权利要求1所述的方法,其特征在于,
所述获取SSH服务端对所述按键指令进行解析的ASCII码,包括:
在所述ASCII码指示可见字符时,缓存所述ASCII码对应的可见字符;
在所述ASCII码指示控制字符时,根据所述ASCII码对应的控制字符的处理逻辑对缓存中的各可见字符进行操作,更新缓存中的各可见字符;
基于所述SSH服务端返回的各ASCII码确定出所述SSH客户端输出的远程命令,包括:
将缓存中的各可见字符确定为所述SSH客户端输出的远程命令。
4.如权利要求2所述的方法,其特征在于,
所述对所述各ASCII码进行解析,得到所述SSH客户端输出的远程命令,包括:
针对所述各ASCII码中的任一个ASCII码,在所述ASCII码指示可见字符时,保留所述ASCII码对应的可见字符;在所述ASCII码指示控制字符时,根据所述ASCII码对应的控制字符的处理逻辑对缓存中的各可见字符进行操作,更新缓存中的各可见字符;
在对所述各ASCII码均解析后,得到所述SSH客户端输出的远程命令。
5.如权利要求1-4任一项所述的方法,其特征在于,
所述确定所述远程命令符合运行要求,包括:
按抽象语法树分析所述远程命令,得到所述远程命令中的各子命令;
针对所述远程命令中的各子命令,若确定存在至少一个子命令命中预设的不可执行命令,则确定所述远程命令不符合运行要求。
6.如权利要求5所述的方法,其特征在于,
所述在确定所述远程命令符合运行要求后,将所述远程命令发送至所述SSH服务端,包括:
针对所述远程命令中的各子命令,若确定所述各子命令均未命中预设的不可执行命令,则确定所述远程命令是否指示更新命令的运行环境;
若确定所述远程命令指示更新命令的运行环境,则在更新所述远程命令的运行环境后,将所述远程命令发送至所述SSH服务端。
7.如权利要求6的所述的方法,其特征在于,所述方法还包括:
若确定所述远程命令未指示更新命令的运行环境,则将所述远程命令发送至所述SSH服务端。
8.一种基于SSH协议的远程命令执行装置,其特征在于,包括:
获取单元,用于基于SSH客户端输出的任一按键指令,获取SSH服务端对所述按键指令进行解析的ASCII码;
远程命令确定单元,用于基于所述SSH服务端返回的各ASCII码确定出所述SSH客户端输出的远程命令;
发送单元,用于在确定所述远程命令符合运行要求后,将所述远程命令发送至所述SSH服务端。
9.一种计算机设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于调用所述存储器中存储的计算机程序,按照获得的程序执行如权利要求1-7任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行如权利要求1-7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111403973.6A CN114090296A (zh) | 2021-11-24 | 2021-11-24 | 一种基于ssh协议的远程命令执行方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111403973.6A CN114090296A (zh) | 2021-11-24 | 2021-11-24 | 一种基于ssh协议的远程命令执行方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114090296A true CN114090296A (zh) | 2022-02-25 |
Family
ID=80303896
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111403973.6A Pending CN114090296A (zh) | 2021-11-24 | 2021-11-24 | 一种基于ssh协议的远程命令执行方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114090296A (zh) |
-
2021
- 2021-11-24 CN CN202111403973.6A patent/CN114090296A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6114403B2 (ja) | 入力文字列に対応する入力候補アイテムを提供する方法及び装置 | |
US9704485B2 (en) | Multimedia information retrieval method and electronic device | |
US20110314294A1 (en) | Password checking | |
CN104915264A (zh) | 一种输入纠错方法和装置 | |
US20180067920A1 (en) | Dictionary updating apparatus, dictionary updating method and computer program product | |
US11216554B2 (en) | Determining apparatus, determining method, and determining program | |
KR102298395B1 (ko) | 사용자 행위 분석 시스템 및 방법과, 이를 위한 이벤트 수집 에이전트 | |
CN103399766A (zh) | 更新输入法系统的方法和设备 | |
CN112182141A (zh) | 一种关键信息抽取方法、装置、设备和可读存储介质 | |
EP3987408A1 (en) | Regular expression generation using span highlighting alignment | |
CN112183052B (zh) | 一种文档重复度检测方法、装置、设备和介质 | |
US9197481B2 (en) | Cloud-based translation method and system for mobile client | |
CN114090296A (zh) | 一种基于ssh协议的远程命令执行方法及装置 | |
CN110688837A (zh) | 数据处理的方法及装置 | |
CN108038124B (zh) | 一种基于大数据的pdf文档采集处理方法、系统及装置 | |
CN115187999A (zh) | 文本识别方法、装置、电子设备及计算机可读存储介质 | |
JP6935849B2 (ja) | 学習方法、学習装置及び学習プログラム | |
CN112822302B (zh) | 数据归一化的方法、装置、电子设备及存储介质 | |
CN114510717A (zh) | 一种elf文件的检测方法、装置、存储介质 | |
CN111984970A (zh) | 一种sql注入检测方法、系统及电子设备和存储介质 | |
WO2020263674A1 (en) | User interface commands for regular expression generation | |
CN113591464B (zh) | 变体文本检测方法、模型训练方法、装置及电子设备 | |
US20220374439A1 (en) | Log Sampling and Storage System | |
CN112328710B (zh) | 实体信息处理方法、装置、电子设备和存储介质 | |
US11233809B2 (en) | Learning device, relearning necessity determination method, and relearning necessity determination program |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |