通過Java實(shí)現(xiàn)bash命令過程解析
這篇文章主要介紹了通過Java實(shí)現(xiàn)bash命令過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
1、BASH 命令簡介
2、Java實(shí)現(xiàn) BASH命令執(zhí)行Shell腳本
1)代碼實(shí)現(xiàn)如下:
import ch.ethz.ssh2.Connection; import ch.ethz.ssh2.Session; import ch.ethz.ssh2.StreamGobbler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; public class BashUtil { private Logger logger = LoggerFactory.getLogger(BashUtil.class); private String hostname; private String username; private String password; private int port; private Connection conn; private BashUtil() { } public BashUtil(String hostname, String username, String password) { this(hostname, username, password, 22); } public BashUtil(String hostname, String username, String password, Integer port) { this.hostname = hostname; this.username = username; this.password = password; if (port == null) { port = 22; } else { this.port = port; } } /** * 創(chuàng)建連接并認(rèn)證 * @return */ public Boolean connection() { try { conn = new Connection(hostname, port); conn.connect(); boolean isAuthenticated = conn.authenticateWithPassword(username, password); return isAuthenticated; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 關(guān)閉連接 */ public void close() { try { conn.close(); conn = null; } catch (Exception e) { e.printStackTrace(); } } /** * 執(zhí)行shell命令 * @param command * @return */ public List<String> command(String command) { if (conn == null && !connection()) { logger.error("Authentication failed."); return null; } List<String> result = new ArrayList<String>(); try { Session sess = conn.openSession(); sess.execCommand(command); InputStream stdout = new StreamGobbler(sess.getStdout()); InputStream stderr = new StreamGobbler(sess.getStderr()); BufferedReader br_out = new BufferedReader(new InputStreamReader(stdout, "utf-8")); BufferedReader br_err = new BufferedReader(new InputStreamReader(stderr, "utf-8")); StringBuffer sb_err = new StringBuffer(); String line = null; while ((line = br_out.readLine()) != null) { result.add(line.trim()); } while ((line = br_err.readLine()) != null) { sb_err.append(line + "\n"); } if (isNotEmpty(sb_err.toString())) { logger.error(sb_err.toString()); return null; } return result; } catch (Exception e) { e.printStackTrace(); } return null; } private static boolean isEmpty(String content) { if (content == null) { return true; } else { return "".equals(content.trim()) || "null".equalsIgnoreCase(content.trim()); } } private static boolean isNotEmpty(String content) { return !isEmpty(content); } public static void main(String[] args){ String hostname = "192.168.123.234"; // 此處根據(jù)實(shí)際情況,換成自己需要訪問的主機(jī)IP String userName = "root"; String password = "password"; Integer port = 22; String command = "cd /home/miracle&&pwd&&ls&&cat luna.txt"; BashUtil bashUtil = new BashUtil(hostname, userName, password, port); List<String> resultList = bashUtil.command(command); StringBuffer result = new StringBuffer(""); resultList.forEach(str -> result.append(str + "\n")); System.out.println("執(zhí)行的結(jié)果如下: \n" + result.toString()); } }
2)執(zhí)行結(jié)果如下:
執(zhí)行的結(jié)果如下: /home/miracle luna.txt Hello, I'm SshUtil. Nice to meet you.^_^
3)pom.xml引用依賴包如下:
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.21</version> </dependency> <!-- ssh --> <dependency> <groupId>ch.ethz.ganymed</groupId> <artifactId>ganymed-ssh2</artifactId> <version>262</version> </dependency>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Bash 腳本實(shí)現(xiàn)每次登錄到 Shell 時(shí)可以查看 Linux 系統(tǒng)信息
- Python3 執(zhí)行Linux Bash命令的方法
- bash腳本中將密碼傳遞給ssh/scp命令方法詳解
- 在Bash腳本中創(chuàng)建和使用數(shù)組方法總結(jié)
- 深入理解Bash中的尖括號(適合初學(xué)者)
- bash命令使用詳解
- Java代碼執(zhí)行shell命令的實(shí)現(xiàn)
- Java簡單實(shí)現(xiàn)調(diào)用命令行并獲取執(zhí)行結(jié)果示例
- java調(diào)用shell命令并獲取執(zhí)行結(jié)果的示例
相關(guān)文章
SpringBoot攔截器excludePathPatterns方法不生效的解決方案
這篇文章主要介紹了SpringBoot攔截器excludePathPatterns方法不生效的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07SpringBoot打Jar包在命令行運(yùn)行流程詳解
這篇文章主要介紹了SpringBoot打Jar包在命令行運(yùn)行流程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09Java動(dòng)態(tài)代理四種實(shí)現(xiàn)方式詳解
這篇文章主要介紹了Java四種動(dòng)態(tài)代理實(shí)現(xiàn)方式,對于開始學(xué)習(xí)java動(dòng)態(tài)代理或者要復(fù)習(xí)java動(dòng)態(tài)代理的朋友來講很有參考價(jià)值,有感興趣的朋友可以參考一下2021-04-04SpringMVC 向jsp頁面?zhèn)鬟f數(shù)據(jù)庫讀取到的值方法
下面小編就為大家分享一篇SpringMVC 向jsp頁面?zhèn)鬟f數(shù)據(jù)庫讀取到的值方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03java實(shí)現(xiàn)可視化界面肯德基(KFC)點(diǎn)餐系統(tǒng)代碼實(shí)例
這篇文章主要介紹了java肯德基點(diǎn)餐系統(tǒng),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05