Java Ganymed-SSH - 从Buffer读取时挂起

时间:2012-12-10 15:32:28

标签: java ssh

目前我正在尝试使用Ganymed-SSH2-Library for Java在ssh-server上运行一些命令。因为我还需要调用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");

将导致以下输出(被删除的USERNAME和HOST):

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)尝试了这个,但是它有同样的问题。

提前致谢:)

1 个答案:

答案 0 :(得分:1)

我猜这个问题不是来自JSch和Ganymed。 以下怎么样?

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