国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

如何使用Java實(shí)現ssh命令登錄主機執行shell命令

發(fā)布時(shí)間:2021-09-27 17:50 來(lái)源:億速云 閱讀:0 作者:小新 欄目: 開(kāi)發(fā)技術(shù) 歡迎投稿:712375056

這篇文章主要介紹如何使用Java實(shí)現ssh命令登錄主機執行shell命令,文中介紹的非常詳細,具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

1、SSH命令

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

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

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

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

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

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.ssh3.Connection;import ch.ethz.ssh3.Session;import ch.ethz.ssh3.StreamGobbler;public class SshUtil { private static String DEFAULT_CHAR_SET = "UTF-8"; private static String tipStr = "=======================%s======================="; private static String splitStr = "=====================================================";  /**  * 登錄主機  * @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(); // 連接主機   isAuthenticated = conn.authenticateWithPassword(userName, password); // 認證   if(isAuthenticated){    System.out.println(String.format(tipStr, "認證成功"));   } else {    System.out.println(String.format(tipStr, "認證失敗"));   }  } 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; }  /**  * 遠程執行shell腳本或者命令  * @param cmd  *  即將執行的命令  * @return  *  命令執行完后返回的結果值  */ public static String execute(Connection conn, String cmd){  String result = "";  Session session = null;  try {   if(conn != null){    session = conn.openSession(); // 打開(kāi)一個(gè)會(huì )話(huà)    session.execCommand(cmd);  // 執行命令    result = processStdout(session.getStdout(), DEFAULT_CHAR_SET);    //如果為得到標準輸出為空,說(shuō)明腳本執行出錯了    if(StringUtils.isBlank(result)){     System.err.println("【得到標準輸出為空】\n執行的命令如下:\n" + cmd);     result = processStdout(session.getStderr(), DEFAULT_CHAR_SET);    }else{     System.out.println("【執行命令成功】\n執行的命令如下:\n" + cmd);    }   }  } catch (IOException e) {   System.err.println("【執行命令失敗】\n執行的命令如下:\n" + cmd + "\n" + e.getMessage());   e.printStackTrace();  } finally {   if (conn != null) {    conn.close();   }   if (session != null) {    session.close();   }  }  return result; } /**  * 解析腳本執行返回的結果集  * @param in 輸入流對象  * @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("解析腳本出錯:" + e.getMessage());   e.printStackTrace();  } catch (IOException e) {   System.err.println("解析腳本出錯:" + e.getMessage());   e.printStackTrace();  }  return buffer.toString(); } public static void main(String[] args){  String ip = "192.168.123.234"; // 此處根據實(shí)際情況,換成自己需要訪(fǎng)問(wèn)的主機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執行的結果如下: \n" + result + splitStr); }}

2)運行結果如下:

=======================認證成功=======================登錄用時(shí): 0.859s=====================================================【執行命令成功】執行的命令如下:cd /home/miracle&&pwd&&ls&&cat luna.txt=====================================================執行的結果如下: /home/miracleluna.txtHello, 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-ssh3</artifactId>   <version>262</version>  </dependency>

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

欧美黑人粗暴多交高潮水最多| 国内精品久久久久影院老司机| 精品精品国产高清a毛片| 粉色视频APP下载安装无限看免费苏州晶体| 国产精品乱码久久久久久软件| 成A人片亚洲日本久久|