Java 我可以使用单个Jsch对象打开多个通道吗?

Java 我可以使用单个Jsch对象打开多个通道吗?,java,linux,eclipse-plugin,jsch,Java,Linux,Eclipse Plugin,Jsch,我需要打开一个SftpChannel进行文件传输,打开一个exec channel在远程系统上执行命令,我是否可以使用单个jsch对象和单个会话对象打开这些频道。如果我可以给我一个小的代码片段,或者请建议我是否有其他方法可以这样做?您可以在单个会话上打开多个频道 Channel chExec = session.openChannel("exec"); Channel chSFTP = session.openChannel("sftp"); chExec.setInputStre

我需要打开一个
SftpChannel
进行文件传输,打开一个
exec channel
在远程系统上执行命令,我是否可以使用单个
jsch
对象和单个
会话
对象打开这些频道。如果我可以给我一个小的代码片段,或者请建议我是否有其他方法可以这样做?

您可以在单个会话上打开多个频道

  Channel chExec = session.openChannel("exec");
  Channel chSFTP = session.openChannel("sftp");

  chExec.setInputStream(System.in);
  chExec.setOutputStream(System.out);
  chSFTP.setInputStream(System.in);
  chSFTP.setOutputStream(System.out);

  chExec.connect();
  chSFTP.connect();
在上面的代码段中,您可能不想将所有系统输入发送到两个通道,因此您必须为一个或两个通道创建一个唯一的流

此外,您可以在同一会话中打开、使用、关闭、然后打开一个新频道

  Channel chExec = session.openChannel("exec");
  Channel chSFTP = session.openChannel("sftp");

  chExec.setInputStream(System.in);
  chExec.setOutputStream(System.out);
  chSFTP.setInputStream(System.in);
  chSFTP.setOutputStream(System.out);

  chExec.connect();
  chSFTP.connect();

Jsch不会自动关闭会话。您必须显式地关闭它们。有关关闭频道和会话的说明,请参阅。

包括代码的可执行版本,您更有可能收到完整的工作代码段。你能有多个相同类型的频道吗?@Roland我试过了,我想这是不允许的。当我试图从同一会话中打开第二个SFTP通道时,基础会话从Ubuntu服务器接收到一条消息(消息类型=SSH\u MSG\u通道\u打开\u失败)。@Roland对前面的错误评论表示抱歉。我已经查看了服务器端设置,并找出了为什么无法打开第二个SFTP通道。事实上,我们可以有多个sftp通道,但它受到
/etc/ssh/sshd\u config
中服务器端
MaxSessions
选项的限制。如果
MaxSessions
设置为1,则只能打开一个通道。