我需要从Java应用程序(在Windows和Linux上运行)执行5到10个命令到SSH服务器,并在JFrame中显示这些命令的输出。输出可能是数千行。 我选择了Ganymed-SSH进行SSH通信,并执行了startShell()方法,该方法给了我登录消息和上次登录信息,但是当我尝试写入OutputStream时,它无效。
以下行输出上次登录和操作系统信息:
while((line = outputReader.readLine()) != null){
System.out.println(line);
}
但是,以下代码似乎没有按预期工作:
OutputStream inputToShell = (shellSession.getStdin());
inputToShell.write(b);
我需要实现终端逻辑吗?如果是这样,我只需要执行一些命令,然后向用户显示输出,如何继续?
答案 0 :(得分:3)
我的建议是围绕Ganymed-SSH库创建一个简单的Java包装器,它接受Java的stdin并将其输出到Shell的stdin,并将Shell的stdout和stderr管道传输到Java的等价物。通过这种方式,您可以测试如何使用库以及以哪种顺序发送的命令等。
例如:
public static void main(String[] args) {
final ShellSession shellSession = ...
Thread input = new Thread() {
@Override public void run() {
byte[] buffer = new byte[1024];
while(!shellSession.isClosed()) {
int read = System.in.read(buffer);
shellSession.getInputStream().write(buffer, read);
}
}
}
Thread output = ...
Thread error = ...
input.start();
output.start();
error.start();
}