欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java遠程調(diào)用Shell腳本并獲取輸出信息【推薦】

 更新時間:2019年09月20日 11:32:03   作者:jacian  
這篇文章主要介紹了Java遠程調(diào)用Shell腳本并獲取輸出信息,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下

1、添加依賴

<dependency>
  <groupId>ch.ethz.ganymed</groupId>
  <artifactId>ganymed-ssh2</artifactId>
  <version>262</version>
</dependency>
<dependency>
  <groupId>commons-io</groupId>
  <artifactId>commons-io</artifactId>
  <version>2.6</version>
</dependency>

2、Api說明

首先構造一個連接器,傳入一個需要登陸的ip地址;

Connection conn = new Connection(ipAddr);

模擬登陸目的服務器,傳入用戶名和密碼;

boolean isAuthenticated = conn.authenticateWithPassword(userName, passWord);

它會返回一個布爾值,true 代表成功登陸目的服務器,否則登陸失敗。

打開一個session,執(zhí)行你需要的linux 腳本命令;

Session session = conn.openSession();
session.execCommand(“ifconfig”);

接收目標服務器上的控制臺返回結(jié)果,讀取br中的內(nèi)容;

InputStream stdout = new StreamGobbler(session.getStdout());
BufferedReader br = new BufferedReader(new InputStreamReader(stdout));

得到腳本運行成功與否的標志 :0-成功 非0-失敗

System.out.println(“ExitCode: ” + session.getExitStatus());

關閉session和connection

session.close();
conn.close();

Tips:

通過第二部認證成功后當前目錄就位于/home/username/目錄之下,你可以指定腳本文件所在的絕對路徑,或者通過cd導航到腳本文件所在的目錄,然后傳遞執(zhí)行腳本所需要的參數(shù),完成腳本調(diào)用執(zhí)行。
執(zhí)行腳本以后,可以獲取腳本執(zhí)行的結(jié)果文本,需要對這些文本進行正確編碼后返回給客戶端,避免亂碼產(chǎn)生。
如果你需要執(zhí)行多個linux控制臺腳本,比如第一個腳本的返回結(jié)果是第二個腳本的入?yún)ⅲ惚仨毚蜷_多個Session,也就是多次調(diào)用 Session sess = conn.openSession();,使用完畢記得關閉就可以了。

3. 實例:工具類

public class SSHTool {
  private Connection conn;
  private String ipAddr;
  private Charset charset = StandardCharsets.UTF_8;
  private String userName;
  private String password;
  public SSHTool(String ipAddr, String userName, String password, Charset charset) {
    this.ipAddr = ipAddr;
    this.userName = userName;
    this.password = password;
    if (charset != null) {
      this.charset = charset;
    }
  }
  /**
   * 登錄遠程Linux主機
   *
   * @return 是否登錄成功
   */
  private boolean login() {
    conn = new Connection(ipAddr);
    try {
      // 連接
      conn.connect();
      // 認證
      return conn.authenticateWithPassword(userName, password);
    } catch (IOException e) {
      e.printStackTrace();
      return false;
    }
  }
  /**
   * 執(zhí)行Shell腳本或命令
   *
   * @param cmds 命令行序列
   * @return 腳本輸出結(jié)果
   */
  public StringBuilder exec(String cmds) throws IOException {
    InputStream in = null;
    StringBuilder result = new StringBuilder();
    try {
      if (this.login()) {
        // 打開一個會話
        Session session = conn.openSession();
        session.execCommand(cmds);
        in = session.getStdout();
        result = this.processStdout(in, this.charset);
        conn.close();
      }
    } finally {
      if (null != in) {
        in.close();
      }
    }
    return result;
  }
  /**
   * 解析流獲取字符串信息
   *
   * @param in   輸入流對象
   * @param charset 字符集
   * @return 腳本輸出結(jié)果
   */
  public StringBuilder processStdout(InputStream in, Charset charset) throws FileNotFoundException {
    byte[] buf = new byte[1024];
    StringBuilder sb = new StringBuilder();
//    OutputStream os = new FileOutputStream("./data.txt");
    try {
      int length;
      while ((length = in.read(buf)) != -1) {
//        os.write(buf, 0, c);
        sb.append(new String(buf, 0, length));
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
    return sb;
  }
  public static void main(String[] args) throws IOException {
    SSHTool tool = new SSHTool("192.168.100.40", "root", "123456", StandardCharsets.UTF_8);
    StringBuilder exec = tool.exec("bash /root/test12345.sh");
    System.out.println(exec);
  }
}

總結(jié)

以上所述是小編給大家介紹的Java遠程調(diào)用Shell腳本并獲取輸出信息,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關文章

  • 關于Mybatis 中使用Mysql存儲過程的方法

    關于Mybatis 中使用Mysql存儲過程的方法

    這篇文章給大家介紹了Mybatis 中使用Mysql存儲過程的方法,本文通過實例代碼相結(jié)合的形式給大家介紹的非常詳細,具有參考借鑒價值,需要的朋友參考下吧
    2018-03-03
  • Java SoftReference類案例詳解

    Java SoftReference類案例詳解

    這篇文章主要介紹了Java SoftReference類案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • JAVA線上常見問題排查手段匯總

    JAVA線上常見問題排查手段匯總

    這篇文章主要介紹了JAVA線上常見問題排查手段匯總,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • java實現(xiàn)將文件上傳到ftp服務器的方法

    java實現(xiàn)將文件上傳到ftp服務器的方法

    這篇文章主要介紹了java實現(xiàn)將文件上傳到ftp服務器的方法,結(jié)合實例形式分析了基于java實現(xiàn)的ftp文件傳輸類定義與使用方法,需要的朋友可以參考下
    2016-08-08
  • JMS 之 Active MQ 的消息傳輸(詳解)

    JMS 之 Active MQ 的消息傳輸(詳解)

    下面小編就為大家?guī)硪黄狫MS 之 Active MQ 的消息傳輸(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • 如何使用@ConditionalOnExpression決定是否生效注釋

    如何使用@ConditionalOnExpression決定是否生效注釋

    這篇文章主要介紹了如何使用@ConditionalOnExpression決定是否生效注釋的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • java多線程JUC常用輔助類詳解

    java多線程JUC常用輔助類詳解

    這篇文章主要為大家介紹了java多線程及并發(fā)編程中JUC常用輔助類,文中附含詳細示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • Java8中的default關鍵字詳解

    Java8中的default關鍵字詳解

    這篇文章主要介紹了Java8中的default關鍵字詳解,在實現(xiàn)某個接口的時候,需要實現(xiàn)該接口所有的方法,這個時候default關鍵字就派上用場了。通過default關鍵字定義的方法,集成該接口的方法不需要去實現(xiàn)該方法,需要的朋友可以參考下
    2023-08-08
  • Debian配置JDK1.7 與Linux Java Helloworld

    Debian配置JDK1.7 與Linux Java Helloworld

    這篇文章主要介紹了Debian配置JDK1.7 與Linux Java Helloworld 的相關資料,需要的朋友可以參考下
    2016-06-06
  • Java兩種動態(tài)代理JDK動態(tài)代理和CGLIB動態(tài)代理詳解

    Java兩種動態(tài)代理JDK動態(tài)代理和CGLIB動態(tài)代理詳解

    這篇文章主要介紹了Java兩種動態(tài)代理JDK動態(tài)代理和CGLIB動態(tài)代理詳解,代理模式是23種設計模式的一種,他是指一個對象A通過持有另一個對象B,可以具有B同樣的行為的模式,為了對外開放協(xié)議,B往往實現(xiàn)了一個接口,A也會去實現(xiàn)接口,需要的朋友可以參考下
    2023-11-11

最新評論