欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java操作SSH2實(shí)現(xiàn)遠(yuǎn)程執(zhí)行l(wèi)inux命令

 更新時(shí)間:2025年01月02日 09:35:45   作者:一起喝芬達(dá)2010  
這篇文章主要為大家詳細(xì)介紹了Java如何操作SSH2實(shí)現(xiàn)遠(yuǎn)程執(zhí)行l(wèi)inux命令,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

引入依賴(lài)

<dependency>
    <groupId>ch.ethz.ganymed</groupId>
    <artifactId>ganymed-ssh2</artifactId>
    <version>262</version>
</dependency>

SSH2Util 工具類(lèi)封裝

import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class SSH2Util {

    //指定默認(rèn)編碼
    private static String DEFAULT_CHARSET = "UTF-8";

    /**
     * 建立SSH2連接
     * @param host 主機(jī)地址
     * @param username 用戶(hù)名
     * @param password 密碼
     * @return Connection
     */
    public static Connection openConnection(String host,String username,String password) {
        try {
            Connection connection = new Connection(host);
            //建立ssh2連接
            connection.connect();
            //檢驗(yàn)用戶(hù)名
            boolean login = connection.authenticateWithPassword(username,password);
            if (login){
                logger.info(host + " 連接成功");
                return connection;
            }else {
                throw new RuntimeException(host + " 用戶(hù)名密碼不正確");
            }
        } catch (Exception e) {
            throw new RuntimeException(host +" "+ e);
        }
    }

    /**
     * 執(zhí)行命令
     * @param connection ssh2連接對(duì)象
     * @param command 命令語(yǔ)句
     * @return 執(zhí)行結(jié)果, 封裝執(zhí)行狀態(tài)和執(zhí)行結(jié)果
     */
    public static ExecCmdResult execCommand(Connection connection,String command){
        ExecCmdResult execCmdResult = new ExecCmdResult();
        Session session = null;
        try{
            session = connection.openSession();
            //執(zhí)行命令
            session.execCommand(command);
            //解析結(jié)果
            String result = parseResult(session.getStdout());
            //解析結(jié)果為空,則表示執(zhí)行命令發(fā)生了錯(cuò)誤,嘗試解析錯(cuò)誤出輸出
            if (result == null||result.length()==0){
                result = parseResult(session.getStderr());

            }else {
                execCmdResult.setSuccess(true);
            }
            //設(shè)置響應(yīng)結(jié)果
            execCmdResult.setResult(result);
            logger.info(command + " ==>> " +execCmdResult.getResult());
            return execCmdResult;

        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

    public static String parseResult(InputStream inputStream) throws IOException{
        //讀取輸出流內(nèi)容
        BufferedReader br = new BufferedReader(new InputStreamReader(inputStream,DEFAULT_CHARSET));
        StringBuffer resultSB = new StringBuffer();
        String line;
        while((line = br.readLine()) != null){
            resultSB.append(line+"\n");
        }
        //替換換行符
        String result = resultSB.toString().replaceAll("[\\t\\n\\r]", "");
        return result;

    }
}

ExecCmdResult 定義返回結(jié)果類(lèi)

public class ExecCmdResult {

    //命令執(zhí)行是否成功
    private boolean flag ;
    //輸出結(jié)果
    private String result;

    public void setFlag(boolean success){
        this.flag = success;
    }

    public boolean getFlag() {
        return flag;
    }

    public String getResult(){
        return result;
    }
    public void setResult(String result){
        this.result = result;
    }

}

SSH2Demo 測(cè)試

import ch.ethz.ssh2.Connection;

public class SSH2Demo {

    public static void main(String[] args) {
        try {
            String host = "168.192.22.7";
            String username = "root";
            String password = "123456";
            Connection connection = SSH2Util.openConnection(host,username,password);
            String cpuInfo = "cat /proc/cpuinfo | grep \"cpu cores\" | uniq"; //服務(wù)器核數(shù)
            ExecCmdResult cup = SSH2Util.execCommand(connection,cpuInfo);
            connection.close();
        }
        catch (Exception a){
            a.printStackTrace();
        }
    }
}

到此這篇關(guān)于Java操作SSH2實(shí)現(xiàn)遠(yuǎn)程執(zhí)行l(wèi)inux命令的文章就介紹到這了,更多相關(guān)Java SSH2遠(yuǎn)程執(zhí)行l(wèi)inux命令內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳細(xì)聊聊JDK中的反模式接口常量

    詳細(xì)聊聊JDK中的反模式接口常量

    這篇文章主要給大家介紹了關(guān)于JDK中反模式接口常量的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用jdk具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-01-01
  • Java利用JSch實(shí)現(xiàn)SSH遠(yuǎn)程操作的技術(shù)指南

    Java利用JSch實(shí)現(xiàn)SSH遠(yuǎn)程操作的技術(shù)指南

    在日常開(kāi)發(fā)中,許多應(yīng)用需要通過(guò) SSH 協(xié)議遠(yuǎn)程連接服務(wù)器來(lái)執(zhí)行命令、上傳或下載文件,JSch是一個(gè)功能強(qiáng)大的 Java 庫(kù),它提供了便捷的接口來(lái)實(shí)現(xiàn) SSH 連接和其他遠(yuǎn)程管理功能,本文將介紹 JSch 的基本功能,并通過(guò)實(shí)際代碼示例幫助您快速上手,需要的朋友可以參考下
    2025-03-03
  • java并發(fā)JUC工具包AtomicInteger原子整型語(yǔ)法基礎(chǔ)

    java并發(fā)JUC工具包AtomicInteger原子整型語(yǔ)法基礎(chǔ)

    這篇文章主要為大家介紹了java并發(fā)JUC工具包AtomicInteger原子整型語(yǔ)法基礎(chǔ),有需要的朋友可以借鑒參考希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • 基于Java實(shí)現(xiàn)Socket編程入門(mén)

    基于Java實(shí)現(xiàn)Socket編程入門(mén)

    Java最初是作為網(wǎng)絡(luò)編程語(yǔ)言出現(xiàn)的,使得客戶(hù)端和服務(wù)器的溝通變成了現(xiàn)實(shí),而在網(wǎng)絡(luò)編程中,使用最多的就是Socket,本文就來(lái)介紹一下基于Java實(shí)現(xiàn)Socket編程入門(mén),感興趣的可以來(lái)了解一下
    2022-03-03
  • SpringBoot配置攔截器的示例

    SpringBoot配置攔截器的示例

    這篇文章主要介紹了SpringBoot配置攔截器的示例,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2020-11-11
  • JDBC使用游標(biāo)實(shí)現(xiàn)分頁(yè)查詢(xún)的方法

    JDBC使用游標(biāo)實(shí)現(xiàn)分頁(yè)查詢(xún)的方法

    這篇文章主要介紹了JDBC使用游標(biāo)實(shí)現(xiàn)分頁(yè)查詢(xún)的方法,實(shí)例分析了jdbc查詢(xún)過(guò)程中游標(biāo)的使用及查詢(xún)分頁(yè)相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-08-08
  • Java壓縮和解壓縮ZIP文件實(shí)戰(zhàn)案例

    Java壓縮和解壓縮ZIP文件實(shí)戰(zhàn)案例

    這篇文章主要給大家介紹了關(guān)于Java壓縮和解壓縮ZIP文件的相關(guān)資料,ZIP是一種較為常見(jiàn)的壓縮形式,最近項(xiàng)目中遇到了再Java中壓縮和解壓縮zip文件的需求,特此分享給大家,需要的朋友可以參考下
    2023-07-07
  • SpringBoot使用hutool操作FTP的詳細(xì)過(guò)程

    SpringBoot使用hutool操作FTP的詳細(xì)過(guò)程

    在使用SpringBoot結(jié)合hutool操作FTP時(shí),遇到防火墻導(dǎo)致上傳文件大小為0kb的問(wèn)題,通過(guò)設(shè)置FTP為被動(dòng)模式解決,本文詳細(xì)解析了FTP的主動(dòng)模式和被動(dòng)模式的工作原理、安全性及適用場(chǎng)景,幫助理解FTP的連接方式和解決網(wǎng)絡(luò)限制問(wèn)題
    2024-09-09
  • Eclipse手動(dòng)導(dǎo)入DTD文件實(shí)現(xiàn)方法解析

    Eclipse手動(dòng)導(dǎo)入DTD文件實(shí)現(xiàn)方法解析

    這篇文章主要介紹了Eclipse手動(dòng)導(dǎo)入DTD文件實(shí)現(xiàn)方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • MyBatis-Plus集成Druid環(huán)境搭建的詳細(xì)教程

    MyBatis-Plus集成Druid環(huán)境搭建的詳細(xì)教程

    這篇文章主要介紹了MyBatis-Plus集成Druid環(huán)境搭建的詳細(xì)教程,需要的朋友可以參考下
    2020-08-08

最新評(píng)論