【问题标题】:java sshd multiple commandjava sshd 多个命令
【发布时间】:2018-01-26 14:53:27
【问题描述】:

如果有人对此问题有实际的解决方案,我将不胜感激。到目前为止,只要通道之一“连接”,我使用的所有实现都会关闭会话,这意味着什么。像大多数人一样,我需要能够编写 ssh 交互脚本,这意味着我需要使用仍然活跃的通道进行操作的结果我不是在寻找具有“cmd1;cmd2;cmd3”类型的命令..

我能想到的最好的例子是,如果您试图通过文件系统进行浏览。

如果每个命令都是一个新会话,那么您将无处可去,因为在每个新会话中,您都会回到第一格。

在命令行中,当您键入操作时,ssh 会话保持打开状态,为什么所有 java 实现与这种方法有如此大的差异,这超出了我的理解。如果我找不到答案,我的下一步实际上是使用 java 的命令 shell 并从那里进行交互,而不是使用 java ssh 库..

【问题讨论】:

标签: java session ssh channel


【解决方案1】:
  public void connect() {
    Session session;
    try {
        session = createConnectedSession();
        java.util.logging.Logger.getLogger("test").log(Level.INFO,"isConnected "+session.isConnected());
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        Channel channel = session.openChannel("shell");

        channel.setOutputStream(output);

        PrintStream ps = new PrintStream(channel.getOutputStream(), true);
        // InputStream is = new InputStream(channel.getInputStream());
        channel.connect();
        sleep();
        java.util.logging.Logger.getLogger("test").log(Level.INFO,"isConnected "+session.isConnected());
        Stack<String> mstack = getCommandStack();
        //readChannel(channel);
        while (!mstack.isEmpty()) {
            String cmd = mstack.pop();
            java.util.logging.Logger.getLogger("test").log(Level.INFO,"sending command "+cmd);
            ps.println(cmd);
            sleep();
            System.out.println(output.toString());
            java.util.logging.Logger.getLogger("test").log(Level.INFO,"command result"+output.toString());
            sleep();
            // System.out.println(output.toString());
            ps.flush();
        }

        channel.disconnect();
        session.disconnect();
    } catch (JSchException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

}

【讨论】:

  • 这实际上对我有用,有几个问题和不一致的结果,但现在它似乎工作正常我能够在一个频道内发送多个命令而无需直接关闭我。仍然没有弄清楚这是一个错误还是一个真正的限制,因为像我这样的许多人在这里寻找相同的答案是可以发送多个命令并使用 JSCh 读取输出我测试它并且它工作。
猜你喜欢
  • 2020-09-17
  • 2013-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多