sshj exec没有按照我的预期显示结果

时间:2012-06-14 19:17:56

标签: java sshj

我尝试从Java连接到服务器并运行多个命令。命令似乎工作正常,但我没有得到我想要的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命令的屏幕输出,可能是详细的

1 个答案:

答案 0 :(得分:0)

你认为这可能与窗口大小有关。保持来自服务器的输出的本地窗口sshj可能已经填满。通过读取API提供的stdout / stderr流(即channel.getInputStream() / channel.getErrorStream()

,在缓冲区中创建空间时,默认规则是扩展它

您有两种选择:

  • 执行命令时,继续耗尽stdout和stderr流。基于你的片段,你实际上是从stdout读取而不是stderr。您可以使用available()上的java.io.InputStream方法对2个流中的读取进行多路复用。

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