zoukankan      html  css  js  c++  java
  • java执行linux shell命令,并拿到返回值

      1 package com.pasier.xxx.util;
      2 
      3 import java.io.IOException;
      4 import java.io.InputStream;
      5 import java.nio.charset.Charset;
      6 
      7 import org.slf4j.Logger;
      8 import org.slf4j.LoggerFactory;
      9 
     10 import ch.ethz.ssh2.ChannelCondition;
     11 import ch.ethz.ssh2.Connection;
     12 import ch.ethz.ssh2.Session;
     13 import ch.ethz.ssh2.StreamGobbler;
     14 
     15 public class RmtShellExecutor {
     16 
     17     private static final Logger LOG = LoggerFactory.getLogger(RmtShellExecutor.class);
     18 
     19     private Connection conn;
     20     private String ip;
     21     private String usr;
     22     private String psword;
     23     private String charset = Charset.defaultCharset().toString();
     24 
     25     private static final int TIME_OUT = 1000 * 5 * 60;
     26 
     27     public RmtShellExecutor(String ip, String usr, String ps) {
     28         this.ip = ip;
     29         this.usr = usr;
     30         this.psword = ps;
     31     }
     32 
     33     private boolean login() throws IOException {
     34         conn = new Connection(ip);
     35         conn.connect();
     36         return conn.authenticateWithPassword(usr, psword);
     37     }
     38 
     39     public String exec(String cmds) throws IOException {
     40         InputStream stdOut = null;
     41         InputStream stdErr = null;
     42         String outStr = "";
     43         String outErr = "";
     44         int ret = -1;
     45 
     46         try {
     47             if (login()) {
     48                 Session session = conn.openSession();
     49                 session.execCommand(cmds);
     50                 stdOut = new StreamGobbler(session.getStdout());
     51                 outStr = processStream(stdOut, charset);
     52                 LOG.info("caijl:[INFO] outStr=" + outStr);
     53                 stdErr = new StreamGobbler(session.getStderr());
     54                 outErr = processStream(stdErr, charset);
     55                 LOG.info("caijl:[INFO] outErr=" + outErr);
     56                 session.waitForCondition(ChannelCondition.EXIT_STATUS, TIME_OUT);
     57                 ret = session.getExitStatus();
     58 
     59             } else {
     60                 LOG.error("caijl:[INFO] ssh2 login failure:" + ip);
     61                 throw new IOException("SSH2_ERR");
     62             }
     63 
     64         } finally {
     65             if (conn != null) {
     66                 conn.close();
     67             }
     68             if (stdOut != null)
     69                 stdOut.close();
     70             if (stdErr != null)
     71                 stdErr.close();
     72         }
     73 
     74         return outStr;
     75     }
     76 
     77     private String processStream(InputStream in, String charset) throws IOException {
     78         byte[] buf = new byte[1024];
     79         StringBuilder sb = new StringBuilder();
     80         while (in.read(buf) != -1) {
     81             sb.append(new String(buf, charset));
     82         }
     83         return sb.toString();
     84     }
     85 
     86     public static void main(String[] args) {
     87 
     88         String usr = "root";
     89         String password = "12345";
     90         String serverIP = "11.22.33.xx";
     91         String shPath = "/root/ab.sh";
     92 
     93         RmtShellExecutor exe = new RmtShellExecutor(serverIP, usr, password);
     94 
     95         String outInf;
     96 
     97         try {
     98             outInf = exe.exec("sh " + shPath + " xn");
     99             System.out.println("outInf= " + outInf);
    100         } catch (IOException e) {
    101             e.printStackTrace();
    102         }
    103     }
    104 
    105 }
  • 相关阅读:
    【LeetCode每天一题】Rotate List(旋转链表)
    【LeetCode每天一题】Permutation Sequence(排列序列)
    【LeetCode每天一题】Length of Last Word(字符串中最后一个单词的长度)
    【LeetCode每天一题】Merge Intervals(合并区间)
    【LeetCode每天一题】Spiral Matrix II(螺旋数组II)
    Ajax基础
    git的命令行操作
    新闻发布系统之登录和注销
    JSTL和EL
    servlet模板的修改
  • 原文地址:https://www.cnblogs.com/enshrineZither/p/3793459.html
Copyright © 2011-2022 走看看