package com.oying.modules.maint.util; import cn.hutool.core.io.IoUtil; import com.jcraft.jsch.ChannelShell; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; import lombok.extern.slf4j.Slf4j; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.Vector; /** * 执行shell命令 * * @author Z * @date 2019/8/10 */ @Slf4j public class ExecuteShellUtil { private Vector stdout; Session session; public ExecuteShellUtil(final String ipAddress, final String username, final String password,int port) { try { JSch jsch = new JSch(); session = jsch.getSession(username, ipAddress, port); session.setPassword(password); session.setConfig("StrictHostKeyChecking", "no"); session.connect(3000); } catch (Exception e) { log.error(e.getMessage(),e); } } public int execute(final String command) { int returnCode = 0; ChannelShell channel = null; PrintWriter printWriter = null; BufferedReader input = null; stdout = new Vector<>(); try { channel = (ChannelShell) session.openChannel("shell"); channel.connect(); input = new BufferedReader(new InputStreamReader(channel.getInputStream())); printWriter = new PrintWriter(channel.getOutputStream()); printWriter.println(command); printWriter.println("exit"); printWriter.flush(); log.info("The remote command is: "); String line; while ((line = input.readLine()) != null) { stdout.add(line); System.out.println(line); } } catch (Exception e) { log.error(e.getMessage(),e); return -1; }finally { IoUtil.close(printWriter); IoUtil.close(input); if (channel != null) { channel.disconnect(); } } return returnCode; } public void close(){ if (session != null) { session.disconnect(); } } public String executeForResult(String command) { execute(command); StringBuilder sb = new StringBuilder(); for (String str : stdout) { sb.append(str); } return sb.toString(); } }