3

我的目标是通过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);

但即使那样我也无法获得输出。

4

1 回答 1

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();    
}
于 2017-12-02T17:12:35.177 回答