Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JSCH在Java中维护SSH通道_Java_Ssh_Client_Jsch - Fatal编程技术网

使用JSCH在Java中维护SSH通道

使用JSCH在Java中维护SSH通道,java,ssh,client,jsch,Java,Ssh,Client,Jsch,我想使用JSCH通过SSH控制Java中的远程系统。 前端是一个简单的按钮GUI,它触发命令的执行。 有些控件是时间关键型的,在按下按钮和执行命令之间应该没有大的延迟 我的问题是: 每次打开一个新通道时,后端大约需要8秒来初始化,直到命令执行为止。(后端接口由RBSH afaik实现) 如果我通过控制台客户端运行一个正常会话,那么一切都会正常运行,不会出现更大的延迟 我的问题: 是否有方法初始化通道以执行某些命令并按顺序读取输出(仅命令输出) 我已经知道,session.openChannel(

我想使用JSCH通过SSH控制Java中的远程系统。 前端是一个简单的按钮GUI,它触发命令的执行。 有些控件是时间关键型的,在按下按钮和执行命令之间应该没有大的延迟

我的问题是: 每次打开一个新通道时,后端大约需要8秒来初始化,直到命令执行为止。(后端接口由RBSH afaik实现)

如果我通过控制台客户端运行一个正常会话,那么一切都会正常运行,不会出现更大的延迟

我的问题: 是否有方法初始化通道以执行某些命令并按顺序读取输出(仅命令输出)

我已经知道,
session.openChannel(“shell”)
可以提供所需的功能,但我不知道如何正确地做到这一点

编辑:我不喜欢JSCH。如果有另一个库可以做到这一点,我也愿意这样做

您需要的是“exec”频道而不是“shell”频道。SCP使用exec通道,因此请查看或访问Internet


或者,如果控制远程服务器,可以为要运行的命令定义“子系统”,并通过子系统通道运行它。exec通道和子系统之间的最大区别在于谁指定要执行的命令。exec通道将执行客户端提供的命令。对于子系统,客户机只需按名称请求子系统,服务器运行正确的命令(或以其他方式提供服务)。SFTP使用了一个名为“SFTP服务器”的子系统,因此您可以了解Jsch的SFTP类是如何实现的。

如果我理解正确,两个exec示例都包括在执行命令后关闭通道。这是我必须避免的情况,因为每个通道打开都需要8秒钟。对于子系统的想法:我无法控制远程ssh实现,它是一个封闭的系统。打开一个通道需要8秒钟,还是每次都要打开一个新会话?如果打开任何类型的频道需要8秒钟,那么也许你应该集中精力解决这个问题。如果你被这种8秒钟的行为所困扰,那么有几种方法可以打开一个通道一次,然后在不关闭它的情况下运行一系列命令