我有完全相同的问题: SSH Output always empty
不幸的是,接受的答案对我不起作用,因为
bufferedReader.readLine()
以循环结束,可能是因为缺少了行尾。
另外我不明白为什么第一个帖子中的代码不起作用。 谁有更深入的见解?
事先提前编辑:如果我这样做
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line);
stringBuilder.append('\n');
}
关闭ssh连接后,没有无限循环,但输出仍为空......
stringBuilder.append(bufferedReader.read());
导致-1作为输出。
只是:
stringBuilder.append(bufferedReader.readLine());
导致“null”。
这种疯狂是什么?我不明白......
答案 0 :(得分:2)
答案:我正在阅读错误的信息流,之后不得不关闭连接。
JSch jsch = new JSch();
Session session = jsch.getSession(username, hostname, 22);
session.setPassword(password);
// Avoid asking for key confirmation
Properties prop = new Properties();
prop.put("StrictHostKeyChecking", "no");
session.setConfig(prop);
session.connect();
// SSH Channel
ChannelExec channelssh = (ChannelExec)
session.openChannel("exec");
InputStream inputStream = channelssh.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder stringBuilder = new StringBuilder();
String line;
/**/
// Execute command
channelssh.setCommand(command);
channelssh.connect();
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line);
stringBuilder.append('\n');
}
channelssh.disconnect();
return stringBuilder.toString();