gpt4 book ai didi

java - 如果输出大小很大,JSch 终端输出读取会失败

转载 作者:太空宇宙 更新时间:2023-11-04 06:33:12 26 4
gpt4 key购买 nike

我正在尝试使用 JSch 在远程计算机上执行 cat 命令并读取输出。如果文件很小,我会获取输出。但如果文件大小很大,我不会得到输出并且命令的执行会被挂起。

请建议我如何解决这个问题

部分代码:

JSch jSch = new JSch();
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
command = "cat test1.properties"
Session jsession = jSch.getSession(this.username, this.host, 22);
jsession.setPassword(this.password);
jsession.setConfig("StrictHostKeyChecking", "no");
jsession.connect();
Channel channel = jsession.openChannel("shell");
OutputStream ops = channel.getOutputStream();
PrintStream ps = new PrintStream(ops, true);
channel.connect();
boolean isPasswordEntered=false;
boolean isYesOrNoEntered=false;
StringBuilder sb = new StringBuilder();
byte[] tmp = new byte[1024];

int timeout = 60*1000;
long end = System.currentTimeMillis() + timeout; // 60 seconds * 1000 ms/sec , max 5 minutes
InputStream in = channel.getInputStream();

while (true){
if (System.currentTimeMillis()>end){
break;
}
while (in.available() > 0) {
end = System.currentTimeMillis()+timeout;
int i = in.read(tmp, 0, 1024);
if (i < 0) {
break;
}
sb.append(new String(tmp, 0, i));
if (!isYesOrNoEntered && sb.indexOf("yes")!=-1){
isYesOrNoEntered = true;
print.println("yes");
Thread.sleep(500);
}
if (!isPasswordEntered && sb.toString().toLowerCase().indexOf("password")!=-1){
isPasswordEntered = true;
print.println(nsmailPassword);
LOG.debug("entering the nsmail password");
Thread.sleep(500);
}
}
if (channel.isClosed()) {
if (in.available() > 0) {
continue;
}
break;
}
}

最佳答案

要通过 ssh 读取远程文件,最好使用 sftp,而不是纯 ssh。 Jsch 内置了对 sftp 的支持。打开 session 后,执行以下操作以打开 sftp channel :

ChannelSftp sftp = (ChannelSftp) session.openChannel("sftp");

打开 sftp channel 后,there are methods读取远程文件,该文件允许您以输入流的形式访问文件的内容:

InputStream stream = sftp.get("/some/file");

如果您需要逐行阅读,可以将其转换为 Reader:

InputStream stream = sftp.get("/some/file");
try {
BufferedReader br = new BufferedReader(new InputStreamReader(stream));
// read from br
} finally {
stream.close();
}

关于java - 如果输出大小很大,JSch 终端输出读取会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25807977/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com