发布时间:2019-08-13作者:laosun阅读(2134)
首先导入jar包
<!-- https://mvnrepository.com/artifact/com.jcraft/jsch --> <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.55</version> </dependency>
调用类
import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import com.google.common.collect.Maps; import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelExec; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; /** * SSH登录Linux调用shell工具类 * @author sun */ public class ShellUtils { protected static final Logger LOG = Logger.getLogger(ShellUtils.class); public static void main(String[] args) { //测试 getDisk("rootlogin", "10.xxx.4.xxx", 22, "rootpassword"); } /** * 获取磁盘使用率 * @param loginName * @param ip * @param port * @param password * @return */ @SuppressWarnings({ "rawtypes", "unchecked" }) public static Result getDisk(String loginName, String ip, int port, String password) { Result result = execute(loginName, ip, port, password, "df -h"); if(ResultConstants.RESULT_CODE_SUCCESS.equals(result.getCode())) { List<String> stdout = (List<String>) result.getData(); if(stdout!=null && stdout.size()>0) { String[] strArray = null; Map<String, String> disk = Maps.newHashMap(); disk.put("ip", ip); int lineNum = 0; for(String line:stdout) { lineNum++; if (lineNum != 2) { continue; } int m = 0; strArray = line.split(" "); for (String para : strArray) { if (para.trim().length() == 0) continue; ++m; if (para.endsWith("G") || para.endsWith("Gi")) { // 目前的服务器 if (m == 2) { disk.put("total", para); } if (m == 3) { disk.put("used", para); } } if (para.endsWith("%")) { if (m == 5) { disk.put("use_rate", para); } } } } result.setCode(ResultConstants.RESULT_CODE_SUCCESS); result.setMsg(ResultConstants.RESULT_DESC_SUCCESS); result.setData(disk); } } return result; } /** * 远程登录并且执行指令返回结果 * @param loginName * @param ip * @param port * @param password * @param command * @return */ @SuppressWarnings({ "unchecked", "rawtypes" }) public static Result execute(String loginName, String ip, int port, String password, String command) { Result result = new Result(); JSch jsch = new JSch(); MyUserInfo userInfo = new MyUserInfo(); List<String> stdout = new ArrayList<>(); try { // 创建session并且打开连接,因为创建session之后要主动打开连接 Session session = jsch.getSession(loginName, ip, port); session.setPassword(password); //最好设置,否则第一次登录会提示不信任 reject HostKey: 10.31.4.195 //https://blog.csdn.net/Mitnick5194/article/details/85863267 session.setConfig("StrictHostKeyChecking", "no"); // 此处必须设置userInfo session.setUserInfo(userInfo); session.connect(); // 打开通道,设置通道类型,和执行的命令 Channel channel = session.openChannel("exec"); ChannelExec channelExec = (ChannelExec) channel; channelExec.setCommand(command); channelExec.setInputStream(null); BufferedReader input = new BufferedReader(new InputStreamReader(channelExec.getInputStream())); channelExec.connect(); // 接收远程服务器执行命令的结果 String line; while ((line = input.readLine()) != null) { stdout.add(line); } input.close(); // 关闭通道 channelExec.disconnect(); // 关闭session session.disconnect(); result.setCode(ResultConstants.RESULT_CODE_SUCCESS); result.setMsg(ResultConstants.RESULT_DESC_SUCCESS); result.setData(stdout); } catch (Exception e) { e.printStackTrace(); LOG.error(LogKit.append("远程SSH执行命令", "出现异常", e.getMessage())); result.setCode(ResultConstants.RESULT_CODE_FAILED); result.setMsg(e.getMessage()); return result; } return result; } }
对象
import com.jcraft.jsch.UserInfo; public class MyUserInfo implements UserInfo { @Override public String getPassphrase() { // TODO Auto-generated method stub return null; } @Override public String getPassword() { // TODO Auto-generated method stub return null; } @Override public boolean promptPassword(String message) { // TODO Auto-generated method stub return false; } @Override public boolean promptPassphrase(String message) { // TODO Auto-generated method stub return false; } @Override public boolean promptYesNo(String message) { // TODO Auto-generated method stub return false; } @Override public void showMessage(String message) { // TODO Auto-generated method stub } }
版权属于: 技术客
原文地址: https://www.sunjs.com/article/detail/9b8adb2b00444d1990f0a829615399d6.html
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。