最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Java實(shí)現(xiàn)ssh命令登錄主機(jī)執(zhí)行shell命令過程解析

 更新時(shí)間:2019年12月18日 15:22:16   作者:龍凌云端  
這篇文章主要介紹了基于Java實(shí)現(xiàn)ssh命令登錄主機(jī)執(zhí)行shell命令過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了基于Java實(shí)現(xiàn)ssh命令登錄主機(jī)執(zhí)行shell命令過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

1、SSH命令

SSH 為 Secure Shell 的縮寫,由 IETF 的網(wǎng)絡(luò)小組(Network Working Group)所制定;SSH 為建立在應(yīng)用層基礎(chǔ)上的安全協(xié)議。SSH 是較可靠,專為遠(yuǎn)程登錄會(huì)話和其他網(wǎng)絡(luò)服務(wù)提供安全性的協(xié)議。利用 SSH 協(xié)議可以有效防止遠(yuǎn)程管理過程中的信息泄露問題。SSH最初是UNIX系統(tǒng)上的一個(gè)程序,后來又迅速擴(kuò)展到其他操作平臺(tái)。SSH在正確使用時(shí)可彌補(bǔ)網(wǎng)絡(luò)中的漏洞。SSH客戶端適用于多種平臺(tái)。幾乎所有UNIX平臺(tái)—包括HP-UX、Linux、AIXSolaris、Digital UNIXIrix,以及其他平臺(tái),都可運(yùn)行SSH。

實(shí)際工作中,我們經(jīng)常使用客戶端工具(比如:Secure CRT,Xshell,MobaXterm等)SSH到主機(jī)上,執(zhí)行一些操作命令。

如何使用Java語(yǔ)言實(shí)現(xiàn)SSH 連接主機(jī),并執(zhí)行Shell命令呢?

2、Java 實(shí)現(xiàn) SSH命令

1)代碼實(shí)現(xiàn)如下:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.Calendar;

import org.apache.commons.lang3.StringUtils;

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


public class SshUtil {
 private static String DEFAULT_CHAR_SET = "UTF-8";
 private static String tipStr = "=======================%s=======================";
 private static String splitStr = "=====================================================";
 
 /**
  * 登錄主機(jī)
  * @return
  *  登錄成功返回true,否則返回false
  */
 public static Connection login(String ip, String userName, String password){
  boolean isAuthenticated = false;
  Connection conn = null;
  long startTime = Calendar.getInstance().getTimeInMillis();
  try {
   conn = new Connection(ip);
   conn.connect(); // 連接主機(jī)

   isAuthenticated = conn.authenticateWithPassword(userName, password); // 認(rèn)證
   if(isAuthenticated){
    System.out.println(String.format(tipStr, "認(rèn)證成功"));
   } else {
    System.out.println(String.format(tipStr, "認(rèn)證失敗"));
   }
  } catch (IOException e) {
   System.err.println(String.format(tipStr, "登錄失敗"));
   e.printStackTrace();
  }
  long endTime = Calendar.getInstance().getTimeInMillis();
  System.out.println("登錄用時(shí): " + (endTime - startTime)/1000.0 + "s\n" + splitStr);
  return conn;
 }
 
 /**
  * 遠(yuǎn)程執(zhí)行shell腳本或者命令
  * @param cmd
  *  即將執(zhí)行的命令
  * @return
  *  命令執(zhí)行完后返回的結(jié)果值
  */
 public static String execute(Connection conn, String cmd){
  String result = "";
  Session session = null;
  try {
   if(conn != null){
    session = conn.openSession(); // 打開一個(gè)會(huì)話
    session.execCommand(cmd);  // 執(zhí)行命令
    result = processStdout(session.getStdout(), DEFAULT_CHAR_SET);

    //如果為得到標(biāo)準(zhǔn)輸出為空,說明腳本執(zhí)行出錯(cuò)了
    if(StringUtils.isBlank(result)){
     System.err.println("【得到標(biāo)準(zhǔn)輸出為空】\n執(zhí)行的命令如下:\n" + cmd);
     result = processStdout(session.getStderr(), DEFAULT_CHAR_SET);
    }else{
     System.out.println("【執(zhí)行命令成功】\n執(zhí)行的命令如下:\n" + cmd);
    }
   }
  } catch (IOException e) {
   System.err.println("【執(zhí)行命令失敗】\n執(zhí)行的命令如下:\n" + cmd + "\n" + e.getMessage());
   e.printStackTrace();
  } finally {
   if (conn != null) {
    conn.close();
   }
   if (session != null) {
    session.close();
   }
  }
  return result;
 }

 /**
  * 解析腳本執(zhí)行返回的結(jié)果集
  * @param in 輸入流對(duì)象
  * @param charset 編碼
  * @return
  *  以純文本的格式返回
  */
 private static String processStdout(InputStream in, String charset){
  InputStream stdout = new StreamGobbler(in);
  StringBuffer buffer = new StringBuffer();
  try {
   BufferedReader br = new BufferedReader(new InputStreamReader(stdout, charset));
   String line = null;
   while((line = br.readLine()) != null){
    buffer.append(line + "\n");
   }
  } catch (UnsupportedEncodingException e) {
   System.err.println("解析腳本出錯(cuò):" + e.getMessage());
   e.printStackTrace();
  } catch (IOException e) {
   System.err.println("解析腳本出錯(cuò):" + e.getMessage());
   e.printStackTrace();
  }
  return buffer.toString();
 }

 public static void main(String[] args){
  String ip = "192.168.123.234"; // 此處根據(jù)實(shí)際情況,換成自己需要訪問的主機(jī)IP
  String userName = "root";
  String password = "password";
  Connection conn = SshUtil.login(ip, userName, password);

  String cmd = "cd /home/miracle&&pwd&&ls&&cat luna.txt";
  String result = SshUtil.execute(conn, cmd);
  System.out.println(splitStr + "\n執(zhí)行的結(jié)果如下: \n" + result + splitStr);
 }
}

2)運(yùn)行結(jié)果如下:

=======================認(rèn)證成功=======================
登錄用時(shí): 0.859s
=====================================================
【執(zhí)行命令成功】
執(zhí)行的命令如下:
cd /home/miracle&&pwd&&ls&&cat luna.txt
=====================================================
執(zhí)行的結(jié)果如下: 
/home/miracle
luna.txt
Hello, I'm SshUtil.
Nice to meet you.^_^
=====================================================

3)pom.xml 引用添加如下:

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
  <dependency>
   <groupId>org.apache.commons</groupId>
   <artifactId>commons-lang3</artifactId>
   <version>3.9</version>
  </dependency>

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot打印POST請(qǐng)求原始入?yún)ody體方式

    SpringBoot打印POST請(qǐng)求原始入?yún)ody體方式

    這篇文章主要介紹了SpringBoot打印POST請(qǐng)求原始入?yún)ody體方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • IntelliJ IDEA 報(bào)錯(cuò):找不到包或者找不到符號(hào)的問題及解決方案

    IntelliJ IDEA 報(bào)錯(cuò):找不到包或者找不到符號(hào)的問題及解決方案

    這篇文章主要介紹了IntelliJ IDEA 報(bào)錯(cuò):找不到包或者找不到符號(hào)的問題及解決方案,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • vscode 配置java環(huán)境并調(diào)試運(yùn)行的詳細(xì)過程

    vscode 配置java環(huán)境并調(diào)試運(yùn)行的詳細(xì)過程

    這篇文章主要介紹了vscode 配置java環(huán)境并調(diào)試運(yùn)行的詳細(xì)過程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • 關(guān)于SpringMVC的異常處理機(jī)制詳細(xì)解讀

    關(guān)于SpringMVC的異常處理機(jī)制詳細(xì)解讀

    這篇文章主要介紹了關(guān)于SpringMVC的異常處理機(jī)制詳細(xì)解讀,SpringMVC是目前主流的Web?MVC框架之一,本文將分析SpringMVC的異常處理內(nèi)容,需要的朋友可以參考下
    2023-05-05
  • SpringBoot啟動(dòng)過程逐步分析講解

    SpringBoot啟動(dòng)過程逐步分析講解

    這篇文章主要介紹了SpringBoot啟動(dòng)過程的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-01-01
  • Java OOM原因以及解決方案

    Java OOM原因以及解決方案

    這篇文章主要介紹了Java OOM原因以及解決方案,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • java 數(shù)據(jù)結(jié)構(gòu)基本算法希爾排序

    java 數(shù)據(jù)結(jié)構(gòu)基本算法希爾排序

    這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)基本算法希爾排序的相關(guān)資料,需要的朋友可以參考下
    2017-08-08
  • 關(guān)于ThreadLocal和InheritableThreadLocal解析

    關(guān)于ThreadLocal和InheritableThreadLocal解析

    這篇文章主要介紹了關(guān)于ThreadLocal和InheritableThreadLocal解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • spring后置通知@AfterReturning的使用

    spring后置通知@AfterReturning的使用

    這篇文章主要介紹了spring后置通知@AfterReturning的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 淺談緩沖字符流 BufferedReader BufferedWriter用法

    淺談緩沖字符流 BufferedReader BufferedWriter用法

    這篇文章主要介紹了緩沖字符流 BufferedReader BufferedWriter的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評(píng)論

韩城市| 灵石县| 陕西省| 舞阳县| 清原| 义乌市| 视频| 宁武县| 衡阳县| 永修县| 萨嘎县| 城步| 临夏县| 陕西省| 赣州市| 斗六市| 淳安县| 长岭县| 皮山县| 湘阴县| 中阳县| 耿马| 城市| 麻栗坡县| 乐清市| 聊城市| 台江县| 双城市| 巩义市| 三穗县| 南川市| 宜兰县| 衡山县| 石台县| 瑞金市| 永仁县| 望江县| 逊克县| 自贡市| 长沙县| 金堂县|