java - JSch - 如何使用 PortForwarding L 从远程服务器捕获流?

标签 java jsch portforwarding bufferedinputstream

我尝试使用InputStream和Buffer[],还有BufferedReader,还有PipedInputStream。对于所有情况我都为空:

        sessionB = jSch.getSession(username, "localhost", forwardedPort);
        sessionB.connect();

          if(sessionB.isConnected()) {
             System.out.println("Connected host B!");

             channel = (ChannelExec) sessionB.openChannel("exec");   

             br = new BufferedReader(new 
             InputStreamReader(channel.getInputStream())); 
             ((ChannelExec)channel).setCommand("command");
             ((ChannelExec)channel).setErrStream(System.err);

             channel.connect();

             if(channel.isConnected()) {

                System.out.println("Channel is connected!");
            }

             String line;

                    while((line = br.readLine()) != null) {
                    System.out.println(line);
                    }

和控制台输出:

已连接主机A!连接主机B! channel 已连接!

问题:我没有打印任何内容 (System.out.println(line);)

有办法通过端口转发从 exec channel 获取该流吗?感谢您的帮助

最佳答案

get/setInputStream 和 get/setOutputStream 只关心命令的标准输入/输出,与端口转发无关。 端口转发是通过两个函数setPortForwardingL和setPortForwardingR完成的。

您的代码中应该有类似的内容。

int assinged_port=session.setPortForwardingL(lport, rhost, rport);

一如既往,关于 JSCH 的文档很少,但有很多 detailed examples对于 L forwardingR forwarding

端口转发是在 session 上完成的,因此我不确定您是否还需要 Activity 连接。但如果这样做,您应该考虑打开“shell”连接而不是“exec”。这样您就不必仅仅为了维持连接而运行无用的命令。

PS:缺少一些代码,因此很难对问题中给出的示例进行准确的说明。

关于java - JSch - 如何使用 PortForwarding L 从远程服务器捕获流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51566847/

相关文章:

java - 使用 JSch 执行 SFTP 时无法连接到安全通道

java - 通过SFTP从java代码连接到AS400服务器

java - JSch 在一个 session 中执行多个 linux 命令

java - 为什么像 Skype 这样的程序不需要您打开端口?

xampp - 中兴路由器F670L中的端口转发

java - 创建结合两个但由一个统治的可观察对象

java - 替换java对象中自己的实例

java - 选择使用工作区内的资源运行服务器时在 RAD 8 中部署和运行 spring 应用程序时出错

android - linux本地循环上的端口转发连接两个android模拟器

java - 你如何在 LibGDX 中移动形状?