将值传递给Channel System.in

时间:2012-12-26 20:45:36

标签: java shell ssh jsch

我的目标是通过ssh shell执行远程命令。所以我使用jsch建立连接并尝试

Channel channel=session.openChannel("exec");

但它没有执行像dir这样的命令。

所以我尝试使用shell但是无法将值传递给System.in,因为我只需要通过GUI发出命令

Channel channel=session.openChannel("shell");
channel.setInputStream(System.in);
channel.setOutputStream(System.out);

在上面的代码中,我需要通过GUI而不是System.in传递值。

所以我试过像

这样的东西
String cmd="help";
InputStream is = new ByteArrayInputStream(cmd.getBytes());
System.setIn(is);
channel.setInputStream(System.in);

但即便如此,我也无法获得输出。

1 个答案:

答案 0 :(得分:0)

原始海报提供了这个答案:

  

我做了一些工作并找到了答案。我将在这里分享。

     

要在ssh shell中以字符串形式输入,可以使用以下代码。

Channel channel=session.openChannel("shell");

OutputStream ops = channel.getOutputStream();
PrintStream ps = new PrintStream(ops, true);

channel.connect();
ps.println("ping localhost"); 
ps.close();

InputStream in=channel.getInputStream();
byte[] bt = new byte[1024];

while(true) {
    while(in.available() > 0) {
        int i=in.read(bt, 0, 1024);
        if(i < 0) {
            break;
        }
        String str=new String(bt, 0, i);
        System.out.print(str); //displays the output of the command executed.
    }
    if(channel.isClosed()) {
        break;
    }
    Thread.sleep(1000);
    channel.disconnect();
    session.disconnect();    
}