Java中怎么遠(yuǎn)程調(diào)用Shell腳本

本篇文章為大家展示了Java中怎么遠(yuǎn)程調(diào)用Shell腳本,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

10年積累的網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先做網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有圖木舒克免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

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說(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);  }}

上述內(nèi)容就是Java中怎么遠(yuǎn)程調(diào)用Shell腳本,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

名稱欄目:Java中怎么遠(yuǎn)程調(diào)用Shell腳本
瀏覽地址:http://bm7419.com/article4/jjdgie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、營(yíng)銷型網(wǎng)站建設(shè)、Google、標(biāo)簽優(yōu)化、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)