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