Closed vieyahn2017 closed 3 months ago
java测试应用-jsch远程执行shell命令
0、maven增加依赖:
1、创建连接:
JSch jsch = new JSch(); Session session = jsch.getSession(user, ip, port); session.setPassword(password);
//跳过登录验证
session.setConfig("StrictHostKeyChecking", "no"); session.setTimeout(connectTimeout); session.connect();
2、打开会话并发送指令
2.1 shell模式
shell模式就是模拟一个伪终端登录到服务器中,可以自行执行命令
Channel channel = session.openChannel("shell");
channel.setInputStream(System.in);
channel.setOutputStream(System.out);
channel.connect();
2.2 exec模式
exec模式即为预先输入命令,将命令发送至服务器,并接受命令返回的结果
Channel channel = session.openChannel("exec");
System.out.println("cmd:\t" + cmd);
ChannelExec channelExec = (ChannelExec) channel;
channelExec.setCommand(cmd);
channel.setInputStream(null);
channelExec.setErrStream(System.err);
channelExec.connect();
channel.connect();
3、获取命令执行结果
InputStream inputStream = channelExec.getInputStream(); ArrayList output = new ArrayList<String>(); //结果保存至ArrayList中 String line; byte[] tmp=new byte[1024]; while(true){
while(inputStream.available() > 0){ int i=inputStream.read(tmp, 0, 1024); if(i<0){
break;
} line = new String(tmp, 0, i); output.add(line); System.out.print(line); } if(channel.isClosed()){ if(inputStream.available() > 0) {
continue;
} System.out.println("exit-with: "+channel.getExitStatus()); break; } }
4、关闭所有通道
channel.disconnect(); session.disconnect();
5、输出结果已经保存在上面定义的output变量中,拿取该变量即可进行下一步操作
java远程ssh小记——jsch
https://blog.csdn.net/m47838704/article/details/79367328