91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在Java中遠程調用Shell腳本

發布時間:2021-02-18 15:30:39 來源:億速云 閱讀:376 作者:Leah 欄目:編程語言

這篇文章給大家介紹 如何在Java中遠程調用Shell腳本,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

1、添加依賴

<dependency>
  <groupId>ch.ethz.ganymed</groupId>
  <artifactId>ganymed-ssh3</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,執行你需要的linux 腳本命令;

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

接收目標服務器上的控制臺返回結果,讀取br中的內容;

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導航到腳本文件所在的目錄,然后傳遞執行腳本所需要的參數,完成腳本調用執行。
執行腳本以后,可以獲取腳本執行的結果文本,需要對這些文本進行正確編碼后返回給客戶端,避免亂碼產生。
如果你需要執行多個linux控制臺腳本,比如第一個腳本的返回結果是第二個腳本的入參,你必須打開多個Session,也就是多次調用 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;
    }
  }
  /**
   * 執行Shell腳本或命令
   *
   * @param cmds 命令行序列
   * @return 腳本輸出結果
   */
  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 腳本輸出結果
   */
  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);
  }
}

關于 如何在Java中遠程調用Shell腳本就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

肥城市| 乌拉特前旗| 桐柏县| 阜阳市| 安龙县| 香港| 新营市| 凌源市| 嘉善县| 高淳县| 布尔津县| 石河子市| 望谟县| 河津市| 张家界市| 霸州市| 聂拉木县| 得荣县| 治多县| 黎平县| 平凉市| 沂水县| 平塘县| 翼城县| 泗阳县| 贺州市| 台南市| 文水县| 嘉善县| 吉林省| 调兵山市| 永嘉县| 河北区| 清徐县| 噶尔县| 军事| 托克逊县| 苍溪县| 霍邱县| 九江县| 大城县|