最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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說(shuō)明

首先構(gòu)造一個(gè)連接器,傳入一個(gè)需要登陸的ip地址;

Connection conn = new Connection(ipAddr);

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

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

它會(huì)返回一個(gè)布爾值,true 代表成功登陸目的服務(wù)器,否則登陸失敗。

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

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

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

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

得到腳本運(yùn)行成功與否的標(biāo)志 :0-成功 非0-失敗

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

關(guān)閉session和connection

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

Tips:

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

3. 實(shí)例:工具類

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;
    }
  }
  /**
   * 登錄遠(yuǎn)程Linux主機(jī)
   *
   * @return 是否登錄成功
   */
  private boolean login() {
    conn = new Connection(ipAddr);
    try {
      // 連接
      conn.connect();
      // 認(rèn)證
      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()) {
        // 打開(kāi)一個(gè)會(huì)話
        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   輸入流對(duì)象
   * @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遠(yuǎn)程調(diào)用Shell腳本并獲取輸出信息,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • 詳解Java中IO字節(jié)流基本操作(復(fù)制文件)并測(cè)試性能

    詳解Java中IO字節(jié)流基本操作(復(fù)制文件)并測(cè)試性能

    這篇文章主要介紹了Java中IO字節(jié)流基本操作(復(fù)制文件)并測(cè)試性能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 基于JVM性能監(jiān)控命令介紹

    基于JVM性能監(jiān)控命令介紹

    下面小編就為大家?guī)?lái)一篇基于JVM性能監(jiān)控命令介紹。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • SpringBoot+Security 發(fā)送短信驗(yàn)證碼的實(shí)現(xiàn)

    SpringBoot+Security 發(fā)送短信驗(yàn)證碼的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot+Security 發(fā)送短信驗(yàn)證碼的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Java SpringBoot整合Canal實(shí)現(xiàn)數(shù)據(jù)同步方式

    Java SpringBoot整合Canal實(shí)現(xiàn)數(shù)據(jù)同步方式

    本文介紹了如何開(kāi)啟和配置Canal,以及如何在Spring Boot中集成Canal,Canal是一種基于MySQL的數(shù)據(jù)庫(kù)變更解析工具,可以將數(shù)據(jù)庫(kù)的變更事件發(fā)送到Kafka、RocketMQ等消息隊(duì)列中,用于數(shù)據(jù)分析和挖掘
    2025-02-02
  • 淺析Java模板方法的一種使用方式

    淺析Java模板方法的一種使用方式

    模板方法說(shuō)白了就是將一段代碼模板化,將通用的代碼段抽取出來(lái),并提供一些自定義的接口去定制的特定位置的某些業(yè)務(wù)功能。本文主要來(lái)和大家聊聊它的一種使用方式,希望對(duì)大家有所幫助
    2023-02-02
  • idea遠(yuǎn)程debug調(diào)試部署在tomcat上項(xiàng)目

    idea遠(yuǎn)程debug調(diào)試部署在tomcat上項(xiàng)目

    本文主要介紹了idea遠(yuǎn)程debug調(diào)試部署在tomcat上項(xiàng)目,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • java 單例模式的實(shí)例詳解

    java 單例模式的實(shí)例詳解

    這篇文章主要介紹了java 單例模式的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助大家徹底理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • java實(shí)現(xiàn)  微博登錄、微信登錄、qq登錄實(shí)現(xiàn)代碼

    java實(shí)現(xiàn) 微博登錄、微信登錄、qq登錄實(shí)現(xiàn)代碼

    這篇文章主要介紹了java實(shí)現(xiàn) 微博登錄、微信登錄、qq登錄實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • SpringBoot中使用MyBatis-Plus實(shí)現(xiàn)分頁(yè)接口的詳細(xì)教程

    SpringBoot中使用MyBatis-Plus實(shí)現(xiàn)分頁(yè)接口的詳細(xì)教程

    MyBatis-Plus是一個(gè)MyBatis的增強(qiáng)工具,在MyBatis的基礎(chǔ)上只做增強(qiáng)不做改變,為簡(jiǎn)化開(kāi)發(fā)、提高效率而生,在SpringBoot項(xiàng)目中使用MyBatis-Plus可以大大簡(jiǎn)化分頁(yè)邏輯的編寫(xiě),本文將介紹如何在 SpringBoot項(xiàng)目中使用MyBatis-Plus實(shí)現(xiàn)分頁(yè)接口
    2024-03-03
  • Java使用itext生成pdf標(biāo)簽的操作方法

    Java使用itext生成pdf標(biāo)簽的操作方法

    iText是著名的開(kāi)放源碼的站點(diǎn)sourceforge一個(gè)項(xiàng)目,是用于生成PDF文檔的一個(gè)java類庫(kù),通過(guò)iText不僅可以生成PDF或rtf的文檔,而且可以將XML、Html文件轉(zhuǎn)化為PDF文件,本文給大家介紹了Java使用itext生成pdf標(biāo)簽的操作方法,需要的朋友可以參考下
    2024-12-12

最新評(píng)論

古浪县| 崇义县| 德州市| 丹棱县| 嘉禾县| 嘉峪关市| 渑池县| 岢岚县| 枣阳市| 延川县| 精河县| 康保县| 于都县| 德格县| 平凉市| 伊吾县| 南部县| 澄城县| 和硕县| 通渭县| 乐至县| 若尔盖县| 邻水| 永清县| 江安县| 宜春市| 白山市| 盐池县| 高安市| 元氏县| 辽宁省| 舞阳县| 剑阁县| 江油市| 博罗县| 萨迦县| 西宁市| 敦化市| 灌云县| 汽车| 叶城县|