gpt4 book ai didi

Java Ganymed-SSH - 从缓冲区读取时挂起

转载 作者:行者123 更新时间:2023-12-01 14:59:57 24 4
gpt4 key购买 nike

目前我正在尝试使用 Java 的 Ganymed-SSH2-Library 在 ssh 服务器上运行一些命令。因为我还需要调用perl脚本,所以无法使用Session.execCommand(); ,因为它只会运行“正常”unix 命令(或者这是错误的?)。相反,我需要使用伪终端。

如果我运行以下代码,它会挂起:

session = con.openSession();
session.requestPTY("vt220");
session.execCommand("/bin/bash");
session.getStdin().write("echo test".getBytes());
int b = 1;
InputStream is = new StreamGobbler(session.getStdout());
while ((b = is.read()) != -1) {
System.out.print((char)b);
}
System.out.println("finished");

将产生以下输出(经过审查的用户名和主机):

echo testUSERNAME@HOST:~

# echo test

但是代码此时将挂起并且永远不会到达 System.out.println("finished");

连接建立工作完美,如果我运行以下代码,它就会工作:

session = con.openSession();
session.execCommand("ls");
BufferedReader reader = new BufferedReader(new InputStreamReader(new StreamGobbler(session.getStdout())));
String line = reader.readLine();
while (line != null) {
line = reader.readLine();
System.out.println(line);
}
System.out.println("finished");

有谁知道问题出在哪里吗?前段时间我用 Jsch(另一个用于 Java 的 SSH-Lib)尝试过这个,但它也有同样的问题。

提前致谢:)

最佳答案

我猜问题不是来自 JSch 和 Ganymed。下面的怎么样?

session.getStdin().write("echo test; exit".getBytes());

关于Java Ganymed-SSH - 从缓冲区读取时挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13804001/

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