资讯详情

java shh 远程执行shell脚本或者命令

package com.elco.util;  import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.util.Calendar;  import com.elco.dto.ConfigMsg; import org.apache.commons.lang3.StringUtils;  import ch.ethz.ssh2.Connection; import ch.ethz.ssh2.Session; import ch.ethz.ssh2.StreamGobbler;  public class SshUtil {      private static String DEFAULT_CHAR_SET = "UTF-8";     private static String tipStr = "=======================%s=======================";     private static String splitStr = "=====================================================";      /**      *      * @param fileLoad      * @param configMsg      * @return      */     public static String executeStatement(String fileLoad, ConfigMsg configMsg){         Connection conn =  SshUtil.login(configMsg.getIp(), configMsg.getUserName(), configMsg.getPassword());         String catalogue = "";         String filename = "";         ///文件存储路径         catalogue = fileLoad.substring(0, fileLoad.lastIndexOf("/")   1);         //文件名称         filename = fileLoad.substring(fileLoad.lastIndexOf("/")   1);         String cmd = "cd " catalogue "&&pwd&&ls&&cat " filename;         String result = SshUtil.execute(conn, cmd);         System.out.println(splitStr   "\n执行结果如下: \n"   result   splitStr);         return result;     }     /**      * 登录主机      * @return      *      成功返回登录true,否则返回false      */     public static Connection login(String ip, String userName, String password){         boolean isAuthenticated = false;         Connection conn = null;         long startTime = Calendar.getInstance().getTimeInMillis();         try {             conn = new Connection(ip);             conn.connect(); // 连接主机              isAuthenticated = conn.authenticateWithPassword(userName, password); // 认证             if(isAuthenticated){                 System.out.println(String.format(tipStr, "认证成功"));             } else {                 System.out.println(String.format(tipStr, "认证失败"));             }         } catch (IOException e) {             System.err.println(String.format(tipStr, "登录失败"));             e.printStackTrace();         }         long endTime = Calendar.getInstance().getTimeInMillis();         System.out.println("登录用时: "   (endTime - startTime)/1000.0   "s\n"   splitStr);         return conn;     }      /**      * 远程执行shell脚本或命令      * @param cmd      *      即将执行的命令      * @return      *      执行命令后返回的结果值      */     public static String execute(Connection conn, String cmd){         String result = "";         Session session = null;         try {             if(conn != null){                 session = conn.openSession();  // 打开会话                 session.execCommand(cmd);      // 执行命令                 result = processStdout(session.getStdout(), DEFAULT_CHAR_SET);                  //如果标准输出为空,说明脚本执行错误                 if(StringUtils.isBlank(result)){                     System.err.println("【标准输出为空】\n执行命令如下:\n"   cmd);                     result = processStdout(session.getStderr(), DEFAULT_CHAR_SET);                 }else{                     System.out.println("【执行命令成功】\n执行命令如下:\n"   cmd);                 }             }         } catch (IOException e) {             System.err.println("【执行命令失败】\n执行命令如下:\n"   cmd   "\n"   e.getMessage());             e.printStackTrace();         } finally {             if (conn != null) {                 conn.close();             }             if (session != null) {                 session.close();             }         }         return result;     }      /**      * 分析脚本执行返回的结果集      * @param in 输入流对象      * @param charset 编码      * @return      *       以纯文本的形式返回      */     private static String processStdout(InputStream in, String charset){         InputStream stdout = new StreamGobbler(in);         StringBuffer buffer = new StringBuffer();         try {             BufferedReader br = new BufferedReader(new InputStreamReader(stdout, charset));             String line = null;             while((line = br.readLine()) != null){                 buffer.append(line   "\n");             }         } catch (UnsupportedEncodingException e) {             System.err.println("分析脚本错误:"   e.getMessage());             e.printStackTrace();         } catch (IOException e) {             System.err.println("分析脚本错误:"   e.getMessage());             e.printStackTrace();         }         return buffer.toString();     }      public static void main(String[] args){         String ip = "XXX.XXx.x.xx";   // 根据实际情况,替换需要访问的主机IP         String userName = "root";         String password = "******";         Connection conn =  SshUtil.login(ip, userName, password);          String cmd = "cd /mnt/datamp/bb&&pwd&&ls&&cat shh测试.txt";         String result = SshUtil.execute(conn, cmd);        System.out.println(splitStr + "\n执行的结果如下: \n" + result + splitStr);
    }
}

标签: elco光电传感器op18

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台