引入依賴
1 <dependency> 2 <groupId>ch.ethz.ganymed</groupId> 3 <artifactId>ganymed-ssh2</artifactId> 4 <version>262</version> 5 </dependency>
創建Connection並連接
1 Connection conn = new Connection("IP"); 2 conn.connect();
需要賬號密碼登錄的機器,進行校驗,返回布爾值
1 boolean login = conn.authenticateWithPassword(ACCOUNT, PASSWORD);
打開回話,並執行shell指令
1 Session session = conn.openSession(); 2 session.execCommand("cd /home/scripts;ls"); //多條指令時,用英文半角頓號隔開
getStdout()方法可拿到一個輸入流,即遠端控制台返回的數據
1 StreamGobbler gobbler = new StreamGobbler(session.getStdout()); 2 BufferedReader reader = new BufferedReader(new InputStreamReader(gobbler));
流處理
StringBuilder result = new StringBuilder(); while(true) { String readLine = reader.readLine(); if (readLine == null) { reader.close(); break; } result.append(readLine).append("\n\r"); }
getExitStatus()可獲取指令執行結果,0-成功;1-失敗
1 Integer exitStatus = session.getExitStatus();
切記:關閉reader、session、conn
以下為完整可用的工具類
1 Connection conn = new Connection("IP"); 2 conn.connect(); 3 boolean login = conn.authenticateWithPassword("ACCOUNT", "PASSWORD"); 4 if (login) { 5 Session session = conn.openSession(); 6 session.execCommand("cd /home/scripts;ls"); 7 StreamGobbler gobbler = new StreamGobbler(session.getStdout()); 8 BufferedReader reader = new BufferedReader(new InputStreamReader(gobbler)); 9 10 StringBuilder result = new StringBuilder(); 11 while(true) { 12 String readLine = reader.readLine(); 13 if (readLine == null) { 14 reader.close(); 15 break; 16 } 17 result.append(readLine).append("\n\r"); 18 } 19 20 Integer exitStatus = session.getExitStatus(); 21 session.close(); 22 23 System.err.println("result:"+result); 24 System.err.println("exit ? " + exitStatus); 25 } 26 27 if (conn != null) { 28 conn.close(); 29 }