0

我试图从 Java SSH 到服务器并运行多个命令。这些命令似乎工作正常,但我没有在 Java 中得到我想要的结果。

这是我的代码片段

        final Command cmd = session.exec("cd /app/t/backo/bin && ls -all && pwd && . setDBLApp && sudo -E -u deploy ./runDBLApp && sudo -E -u deploy ./nightlyDBL -type host ");

        System.out.println(IOUtils.readFully(cmd.getInputStream()).toString());
        cmd.join(30, TimeUnit.SECONDS);
        System.out.println("\n** exit status: " + cmd.getExitStatus());

这是我看到的输出。我认为这与 LocalWindow 大小有关,但我不知道如何解决它。这仅在我使用具有大量屏幕输出的 ssh 命令时发生(或似乎发生)

这是一个小片段,我得到了 100 行左右

14:56:48.957 [reader] INFO  n.s.s.c.c.direct.SessionChannel - Received window adjustment for 2097152 bytes
14:56:48.957 [reader] DEBUG n.s.s.c.channel.Window$Remote - Increasing by 2097152 up to 2097152
14:56:48.957 [reader] DEBUG net.schmizz.concurrent.Promise - Setting <<chan#0 / chanreq for exec>> to `SOME`
14:56:48.963 [reader] DEBUG n.s.s.c.channel.Window$Local - Consuming by 4096 down to 2093056
14:56:48.964 [reader] DEBUG n.s.s.c.channel.Window$Local - Consuming by 1002 down to 2092054
14:56:48.964 [reader] DEBUG n.s.s.c.channel.Window$Local - Consuming by 23 down to 2092031
14:56:49.090 [reader] DEBUG n.s.s.c.channel.Window$Local - Consuming by 141 down to 2091890
14:56:49.120 [reader] DEBUG n.s.s.c.channel.Window$Local - Consuming by 267 down to 2091623
14:56:49.230 [reader] DEBUG n.s.s.c.channel.Window$Local - Consuming by 309 down to 2091314
14:56:49.531 [reader] DEBUG n.s.s.c.channel.Window$Local - Consuming by 308 down to 2091006
14:56:49.532 [reader] DEBUG n.s.s.c.channel.Window$Local - Consuming by 306 down to 2090700

我想看到的是 ssh 命令的屏幕输出,可能很冗长

4

1 回答 1

0

您认为这可能与窗口大小有关是正确的。为来自服务器的输出而保存的本地窗口 sshj 可能已填满。默认规则是当您通过读取 API 提供的 stdout/stderr 流(即channel.getInputStream()/channel.getErrorStream()

你有两个选择:

  • 在命令执行时继续排空 stdout 和 stderr 流。根据您的代码段,您实际上是从标准输出读取,而不是从标准错误读取。available()您可以使用已实现的on 方法多路复用来自 2 个流的读取java.io.InputStream

  • 设置sessionChannel.setAutoExpand(true)但请注意,这意味着无论产生多少输出,即使您没有通过读取 stdout/stderr 流来耗尽本地窗口,它们也会继续扩展。所以这有可能导致高内存消耗。

于 2012-06-18T15:35:07.373 回答