我的目标是通过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);
但即便如此,我也无法获得输出。
答案 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();
}