Java操作SSH2實(shí)現(xiàn)遠(yuǎn)程執(zhí)行l(wèi)inux命令
引入依賴(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)文章
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ǔ),有需要的朋友可以借鑒參考希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03
基于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
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)案例
這篇文章主要給大家介紹了關(guān)于Java壓縮和解壓縮ZIP文件的相關(guān)資料,ZIP是一種較為常見(jiàn)的壓縮形式,最近項(xiàng)目中遇到了再Java中壓縮和解壓縮zip文件的需求,特此分享給大家,需要的朋友可以參考下2023-07-07
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)方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
MyBatis-Plus集成Druid環(huán)境搭建的詳細(xì)教程
這篇文章主要介紹了MyBatis-Plus集成Druid環(huán)境搭建的詳細(xì)教程,需要的朋友可以參考下2020-08-08

