程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java如何遠程調用linux的命令或者腳本

java如何遠程調用linux的命令或者腳本

編輯:關於JAVA

Java通過SSH2協議執行遠程Shell腳本(ganymed-ssh2-build210.jar)

使用步驟如下:

1.導包

官網下載:

http://www.ganymed.ethz.ch/ssh2/

maven坐標:

<dependency>  
  <groupId>com.ganymed.ssh2</groupId>  
  <artifactId>ganymed-ssh2-build</artifactId>  
  <version>210</version>  
 </dependency>

2.apI說明

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

Connection conn = new Connection(hostname);

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

boolean isAuthenticated = conn.authenticateWithPassword(username, password);它會返回一個布爾值,true 代表成功登陸目的服務器,否則登陸失敗

3.  打開一個session,有點象Hibernate的session ,執行你需要的linux 腳本命令 。

Session sess = conn.openSession();

sess.execCommand("last");

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

InputStream stdout = new StreamGobbler(sess.getStdout());

BufferedReader br = new BufferedReader(new InputStreamReader(stdout));

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

System.out.println("ExitCode: " + sess.getExitStatus());

6.關閉session和connection

sess.close();

conn.close();

備注:

1.通過第2步認證成功後,當前目錄就位於/home/username/目錄之下,你可以指定腳本文件所在的絕對路徑,或者通過cd導航到腳本文件所在的目錄,然後傳遞執行腳本所需要的參數,完成腳本調用執行。

2.執行腳本以後,可以獲取腳本執行的結果文本,需要對這些文本進行正確編碼後返回給客戶端,避免亂碼產生。

3.如果你需要執行多個linux控制台腳本,比如第一個腳本的返回結果是第二個腳本的入參,你必須打開多個Session,也就是多次調用

Session sess = conn.openSession();,使用完畢記得關閉就可以了

3.實例代碼,這個類可以直接拷貝過去用

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.InputStreamReader;  
import java.io.UnsupportedEncodingException;  
import org.apache.commons.lang.StringUtils;  
import ch.ethz.ssh2.Connection;  
import ch.ethz.ssh2.Session;  
import ch.ethz.ssh2.StreamGobbler;  
      
/** 
 * 遠程執行linux的shell script 
 * @author Ickes 
 * @since  V0.1 
 *

public static void main(String[] args) {  
        RemoteExecuteCommand rec=new RemoteExecuteCommand("192.168.238.133", "root","ickes");  
        //執行命令  
        System.out.println(rec.execute("ifconfig"));  
        //執行腳本  
        rec.execute("sh /usr/local/tomcat/bin/statup.sh");  
        //這個方法與上面最大的區別就是,上面的方法,不管執行成功與否都返回,  
        //這個方法呢,如果命令或者腳本執行錯誤將返回空字符串  
        rec.executeSuccess("ifconfig");  
              
    }

需要導入的包:

<dependency>  
      <groupId>com.ganymed.ssh2</groupId>  
      <artifactId>ganymed-ssh2-build</artifactId>  
      <version>210</version>  
     </dependency>  
     <dependency>  
        <groupId>commons-io</groupId>  
        <artifactId>commons-io</artifactId>  
        <version>2.4</version>  
        <type>jar</type>  
        <scope>compile</scope>  
    </dependency>  
    <dependency>  
        <groupId>commons-lang</groupId>  
        <artifactId>commons-lang</artifactId>  
        <version>2.6</version>  
        <type>jar</type>  
        <scope>compile</scope>  
    </dependency>

作者:csdn博客 lzeog48466

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved