java ssh2 連接并執(zhí)行 linux命令

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

或者官方下載: http://www.ganymed.ethz.ch/ssh2/

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 遠程執(zhí)行l(wèi)inux命令
 */
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;
    }

    /**
     * 執(zhí)行命令
     */
    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:命令不得執(zhí)行、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();
            }
        }
    }
}

關于返回值(ExitCode),具體看這個。
http://www.tldp.org/LDP/abs/html/exitcodes.html

每次執(zhí)行不同的對象的時候都會重新連接一次,懶得判斷。
execCommand(cmd) 方法好像可以傳進去一個String數(shù)組,懶得測。

我執(zhí)行的命令經(jīng)常給我返回ExitCode: null
反正正確執(zhí)行了也懶得查什么原因了。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評論 19 139
  • 本文是Medusa和Hydra快速入門手冊的第二部分,第一部分的傳送門這兩篇也是后續(xù)爆破篇的一部分,至于字典,放在...
    LinuxSelf閱讀 3,121評論 0 4
  • 太累太累。不想開車,不想說話。不想動。有一種虛脫的感覺。 很多很多的事情。今天開會有人說,你對距離的把握不夠好。是...
    淺淺的柒閱讀 263評論 0 0
  • EnjoyWT閱讀 146評論 0 0
  • 上次頻繁登陸簡書還是寒假,把喜歡的文章發(fā)給前任,和他一起分享。大年初二從爺爺家回來的夜里11點多前任給我打了電話。...
    嚷嚷要瘦的兔砸閱讀 303評論 0 0

友情鏈接更多精彩內(nèi)容