1. 程式人生 > >java 遠端執行 linux 命令

java 遠端執行 linux 命令

Maven:

<!-- https://mvnrepository.com/artifact/ch.ethz.ganymed/ganymed-ssh2 -->
<dependency>
    <groupId>ch.ethz.ganymed</groupId>
    <artifactId>ganymed-ssh2</artifactId>
    <version>build210</version>
</dependency>
package ;

import java.io.BufferedReader;
import
java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import ch.ethz.ssh2.Connection; import ch.ethz.ssh2.Session; import ch.ethz.ssh2.StreamGobbler; /** * @Description 遠端執行linux命令 */ public class SSHUtil { private String host; // ip private String username; private
String password; /** * @param host(ip) * @param username(使用者名稱) * @param password(密碼) */ public SSHUtil(String host, String username, String password) { this.host = host; this.username = username; this.password = password; } private Connection conn = null
; /** * 連線 */ private boolean connect() { conn = new Connection(host); try { conn.connect(); if (conn.authenticateWithPassword(username, password)) { return true; } } catch (Exception e) { e.printStackTrace(); } return false; } /** * 執行命令 */ public String execute(String command) { if (command == null || "null".equals(command)) { return "傳入命令為空!!!"; } if (!connect()) { return "連線伺服器失敗!!!"; } Session session = null; try { session = conn.openSession(); session.execCommand(command); InputStream stdout = new StreamGobbler(session.getStdout()); BufferedReader br = new BufferedReader(new InputStreamReader(stdout)); StringBuffer sb = new StringBuffer(); // ExitCode正常為0 // 1:報錯、2:誤用命令、126:命令不得執行、127:沒找到命令、130:ctrl+c結束、255:返回碼超出範圍 sb.append("ExitCode: " + session.getExitStatus() + "\n"); while (true) { String line = br.readLine(); if (line == null) break; sb.append(line + "\n"); } return sb.toString(); } catch (IOException e) { e.printStackTrace(); return "error"; } finally { if (conn != null) { conn.close(); } if (session != null) { session.close(); } } } }

每次執行不同的物件的時候都會重新連線一次,懶得判斷。
execCommand(cmd) 方法好像可以傳進去一個String陣列,懶得測。

我執行的命令經常給我返回ExitCode: null
反正正確執行了也懶得查什麼原因了。