我尝试使用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);
}
问题:我什么都没打印(System.out.println(line);)
有一种方法可以通过portforwarding从exec通道获取该流?谢谢您的帮助
答案 0 :(得分:1)
get / setInputStream和get / setOutputStream仅与命令的标准输入/输出有关,与端口转发无关。 端口转发通过两个函数setPortForwardingL和setPortForwardingR完成。
您的代码中应该有类似的内容。
int assinged_port=session.setPortForwardingL(lport, rhost, rport);
与往常一样,关于JSCH的文档很少,但是detailed examples和L forwarding的R forwarding
端口转发已在会话上完成,因此我不确定您是否还需要活动连接。但是,如果这样做,则应考虑打开“ shell”连接而不是“ exec”。这样,您就不必为了维护连接而运行无用的命令。
PS:缺少一些代码,因此很难对问题中给出的示例进行准确的说明。
答案 1 :(得分:0)
感谢您的帮助。我使用Pipes解决了这个问题,我分享了我所做的事情:
PipedInputStream en = new PipedInputStream();
pin = new PipedOutputStream((PipedInputStream) en);
BufferedReader br = new BufferedReader(new InputStreamReader((PipedInputStream)
channel.getInputStream()));
channel.connect(5*1000);
String received=null;
while((received=br.readLine())!=null) {
System.out.println(received);
}