【问题标题】:Maintaining a SSH channel in Java with JSCH使用 JSCH 在 Java 中维护 SSH 通道
【发布时间】:2013-09-23 13:25:54
【问题描述】:

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

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

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

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

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

编辑:我不依赖于 JSCH。如果有另一个图书馆可以做到这一点,我也愿意这样做

【问题讨论】:

标签: java ssh client jsch


【解决方案1】:

您想要一个“exec”通道而不是“shell”通道。 SCP 使用的是 exec 通道,所以请看网上的 one of the SCP examplesone of the SCP libraries

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

【讨论】:

  • 如果我做对了,这两个 exec 示例都包括在执行命令后关闭通道。这是我必须避免的情况,因为每个通道打开需要 8 秒。对于子系统的想法:我无法控制远程 ssh 的实现,它是一个封闭的系统。
  • 打开一个频道需要 8 秒只是,还是每次都打开一个新会话?如果打开任何类型的频道需要 8 秒,那么也许你应该集中精力解决这个问题。如果你被这个 8 秒的行为卡住了,那么有办法打开一个通道一次,然后运行一系列命令而不关闭它。
  • 看看这个example class调用的结果是pastebin.com/u5kAccaD
猜你喜欢
  • 2013-12-31
  • 2019-02-28
  • 2015-03-09
  • 2015-05-05
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多