使用JSCH在Java中维护SSH通道

时间:2013-09-23 13:25:54

标签: java ssh client jsch

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

我的问题: 每次打开新通道时,后端都需要大约8秒的时间来初始化,直到命令执行完毕。 (后端接口使用RBSH afaik实现)

如果我通过控制台客户端运行正常会话,一切运行正常,没有更大的延迟。

我的问题: 有没有办法初始化一个通道来执行一些命令并按顺序读取输出(只有命令输出)?

我已经发现session.openChannel("shell")可以提供所需的功能,但我无法弄清楚如何正确地做到这一点。

编辑:我与JSCH无关。如果有另一个可以做到这一点的图书馆,我也会为此开放

1 个答案:

答案 0 :(得分:1)

您想要一个“exec”频道而不是“shell”频道。 SCP使用exec频道,因此请查看互联网上的one of the SCP examplesone of the SCP libraries

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