1

我正在使用 sshj 连接到远程机器以检索各种值。正如我在 sshj 中所理解的,当我执行以下代码来检索远程机器的主机名时:

SSHClient sshClient = new SSHClient();
Session session = sshClient.startSession();
Command commandObject = session.exec("hostname");

我知道我可以通过抓取输入流来检索返回值

session.getInputStream();

我似乎遇到的问题是,会话对象(和命令)被设计为“一次性使用”的时尚。因此,考虑到这一点,我想在完成会话后关闭会话以清理资源,即

commandObject.close();

但是,由于 sshj 的异步特性,我无法确定输入流中何时有返回值可用,因为似乎没有内置任何回调功能。

我能想到解决这个问题的唯一方法是在检查输入流之前休眠一段预定义的时间。但是我觉得这只是一个 hack,我希望有一个更好的解决方案来解决所有这些问题。

有没有人在使用 sshj 时遇到过类似的问题?有任何可能的解决方案吗?

干杯!

4

1 回答 1

0

您可以在 Session 对象上调用 join() ,当命令退出时,此方法将返回(或者如果超时到期)。然后,您可以使用 getExitCode() -> Integer 检查退出代码,如果未收到退出代码,则该代码可能为空。

编辑:返回值是指命令生成的输出吗?getInputStream() 或 getErrorStream() 返回的 InputStream 实现了 available() 方法,因此您可以在此基础上实现解决方案。

于 2011-10-22T09:34:29.207 回答