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í)一下
引入依賴
<dependency> <groupId>ch.ethz.ganymed</groupId> <artifactId>ganymed-ssh2</artifactId> <version>262</version> </dependency>
SSH2Util 工具類封裝
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 用戶名 * @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)用戶名 boolean login = connection.authenticateWithPassword(username,password); if (login){ logger.info(host + " 連接成功"); return connection; }else { throw new RuntimeException(host + " 用戶名密碼不正確"); } } 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é)果類
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)文章
JavaWeb項(xiàng)目FullCalendar日歷插件使用的示例代碼
本篇文章主要介紹了JavaWeb項(xiàng)目FullCalendar日歷插件使用的示例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08java實(shí)現(xiàn)分段讀取文件并通過HTTP上傳的方法
這篇文章主要介紹了java實(shí)現(xiàn)分段讀取文件并通過HTTP上傳的方法,實(shí)例分析了java分段讀取文件及使用http實(shí)現(xiàn)文件傳輸?shù)南嚓P(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07Java fastjson解析json字符串實(shí)現(xiàn)過程解析
這篇文章主要介紹了Java fastjson解析json字符串實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10SpringBoot+Querydsl?框架實(shí)現(xiàn)復(fù)雜查詢解析
本篇主要將介紹的是利用spring query dsl框架實(shí)現(xiàn)的服務(wù)端查詢解析和實(shí)現(xiàn)介紹,對(duì)SpringBoot?Querydsl?查詢操作感興趣的朋友一起看看吧2022-05-05