使用springboot對linux進(jìn)行操控的方法示例
1,在pom中導(dǎo)入
<dependency> <groupId>ch.ethz.ganymed</groupId> <artifactId>ganymed-ssh2</artifactId> <version>build210</version> </dependency>
2,編寫工具類
package org.jeecg.modules.system.util; /** * @Description: * @Author: LGX * @Date: 2020/11/19 10:36 */ import ch.ethz.ssh2.Connection; import ch.ethz.ssh2.Session; import ch.ethz.ssh2.StreamGobbler; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.io.*; /** * 遠(yuǎn)程執(zhí)行l(wèi)inux的shell script * @author Ickes * @since V0.1 */ @Data @NoArgsConstructor @AllArgsConstructor @Slf4j @Component public class RemoteExecuteCommandutil { //字符編碼默認(rèn)是utf-8 private static String DEFAULTCHART="UTF-8"; private Connection conn; @Value(value = "${jeecg.linux.ip}") public String ip; @Value(value = "${jeecg.linux.userName}") public String userName; @Value(value = "${jeecg.linux.userPwd}") public String userPwd; /** * 遠(yuǎn)程登錄linux的主機(jī) * @author Ickes * @since V0.1 * @return * 登錄成功返回true,否則返回false */ public Boolean login(){ boolean flg=false; try { conn = new Connection(ip); conn.connect();//連接 flg=conn.authenticateWithPassword(userName, userPwd);//認(rèn)證 } catch (IOException e) { e.printStackTrace(); } return flg; } /** * @author Ickes * 遠(yuǎn)程執(zhí)行shll腳本或者命令 * @param cmd * 即將執(zhí)行的命令 * @return * 命令執(zhí)行完后返回的結(jié)果值 * @since V0.1 */ public String execute(String cmd){ String result=""; try { if(login()){ Session session= conn.openSession();//打開一個(gè)會(huì)話 session.execCommand(cmd);//執(zhí)行命令 result=processStdout(session.getStdout(),DEFAULTCHART); //如果為得到標(biāo)準(zhǔn)輸出為空,說明腳本執(zhí)行出錯(cuò)了 if(StringUtils.isBlank(result)){ result=processStdout(session.getStderr(),DEFAULTCHART); } conn.close(); session.close(); } } catch (IOException e) { e.printStackTrace(); } return result; } /** * @author Ickes * 遠(yuǎn)程執(zhí)行shll腳本或者命令 * @param cmd * 即將執(zhí)行的命令 * @return * 命令執(zhí)行成功后返回的結(jié)果值,如果命令執(zhí)行失敗,返回空字符串,不是null * @since V0.1 */ public String executeSuccess(String cmd){ String result=""; try { if(login()){ Session session= conn.openSession();//打開一個(gè)會(huì)話 session.execCommand(cmd);//執(zhí)行命令 result=processStdout(session.getStdout(),DEFAULTCHART); conn.close(); session.close(); } } catch (IOException e) { e.printStackTrace(); } return result; } /** * 解析腳本執(zhí)行返回的結(jié)果集 * @author Ickes * @param in 輸入流對象 * @param charset 編碼 * @since V0.1 * @return * 以純文本的格式返回 */ private 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) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return buffer.toString(); } }
3,yml里編寫配置信息
jeecg : linux: ip: 192.168.xxx.xxx userName: root userPwd: 123456
4,注入工具類,編寫命令
@Autowired private RemoteExecuteCommandutil Commandutil; @GetMapping(value = "/training") public String training(@RequestParam(name="cmd") String cmd){ // String a = "sh /opt/shops/test1.sh 1 3"; //命令返回的信息 String cmdInformation =Commandutil.execute("source /etc/profile;"+cmd); return cmdInformation; }
由于ssh連接無法自動(dòng)獲取環(huán)境變量的值,得再執(zhí)行前面加入source /etc/profile;來手動(dòng)識別,如果還是不行可以在/etc/profile末尾加入export PATH="$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
到此這篇關(guān)于使用springboot對linux進(jìn)行操控的方法示例的文章就介紹到這了,更多相關(guān)springboot linux操控內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Linux下部署springboot項(xiàng)目的方法步驟
- Linux編輯啟動(dòng)、停止與重啟springboot jar包腳本實(shí)例
- Linux啟動(dòng)與停止spring boot工程的腳本示例
- Linux 啟動(dòng)停止SpringBoot jar 程序部署Shell 腳本的方法
- 使用linux部署Spring Boot程序
- Springboot jar文件如何打包zip在linux環(huán)境運(yùn)行
- spring boot linux啟動(dòng)方式詳解
- Linux+Docker+SpringBoot+IDEA一鍵自動(dòng)化部署的詳細(xì)步驟
相關(guān)文章
Java實(shí)現(xiàn)平鋪列表(List)互轉(zhuǎn)樹形(Tree)結(jié)構(gòu)
本文主要介紹了Java實(shí)現(xiàn)平鋪列表(List)互轉(zhuǎn)樹形(Tree)結(jié)構(gòu),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08使用Java反射模擬實(shí)現(xiàn)Spring的IoC容器的操作
這篇文章主要介紹了使用Java反射模擬實(shí)現(xiàn)Spring的IoC容器的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08Java中的數(shù)組流ByteArrayOutputStream用法
Java中的ByteArrayOutputStream是java.io包中的一個(gè)類,用于在內(nèi)存中創(chuàng)建字節(jié)數(shù)組緩沖區(qū),支持動(dòng)態(tài)擴(kuò)展,它繼承自O(shè)utputStream,允許以字節(jié)形式寫入數(shù)據(jù),無需與外部設(shè)備交互,常用方法包括write()、toByteArray()、toString()等2024-09-09java教程散列表和樹所對應(yīng)容器類及HashMap解決沖突學(xué)習(xí)
本篇篇文章是java教程,主要介紹了java教程散列表,樹所對應(yīng)容器類及HashMap解決沖突的學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10深入探究Java線程的創(chuàng)建與構(gòu)造方法
這篇文章主要給大家分享的是java線程的創(chuàng)建以及構(gòu)造方法,想了解具體方式的小伙伴可以參考下面文章內(nèi)容,希望對你有所幫助2022-04-04