我尝试使用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 forwarding和 R forwarding
端口转发是在 session 上完成的,因此我不确定您是否还需要 Activity 连接。但如果这样做,您应该考虑打开“shell”连接而不是“exec”。这样您就不必仅仅为了维持连接而运行无用的命令。
PS:缺少一些代码,因此很难对问题中给出的示例进行准确的说明。
关于java - JSch - 如何使用 PortForwarding L 从远程服务器捕获流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51566847/