使用springboot對(duì)linux進(jìn)行操控的方法示例
1,在pom中導(dǎo)入
<dependency> <groupId>ch.ethz.ganymed</groupId> <artifactId>ganymed-ssh2</artifactId> <version>build210</version> </dependency>
2,編寫(xiě)工具類
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@Componentpublic 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();//打開(kāi)一個(gè)會(huì)話session.execCommand(cmd);//執(zhí)行命令result=processStdout(session.getStdout(),DEFAULTCHART);//如果為得到標(biāo)準(zhǔn)輸出為空,說(shuō)明腳本執(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();//打開(kāi)一個(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 輸入流對(duì)象 * @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里編寫(xiě)配置信息
jeecg : linux: ip: 192.168.xxx.xxx userName: root userPwd: 123456
4,注入工具類,編寫(xiě)命令
@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連接無(wú)法自動(dòng)獲取環(huán)境變量的值,得再執(zhí)行前面加入source /etc/profile;來(lái)手動(dòng)識(shí)別,如果還是不行可以在/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對(duì)linux進(jìn)行操控的方法示例的文章就介紹到這了,更多相關(guān)springboot linux操控內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. CSS hack用法案例詳解2. 詳解盒子端CSS動(dòng)畫(huà)性能提升3. 讀大數(shù)據(jù)量的XML文件的讀取問(wèn)題4. CSS Hack大全-教你如何區(qū)分出IE6-IE10、FireFox、Chrome、Opera5. html小技巧之td,div標(biāo)簽里內(nèi)容不換行6. 告別AJAX實(shí)現(xiàn)無(wú)刷新提交表單7. HTML DOM setInterval和clearInterval方法案例詳解8. XML入門(mén)的常見(jiàn)問(wèn)題(一)9. 使用css實(shí)現(xiàn)全兼容tooltip提示框10. 詳解瀏覽器的緩存機(jī)制
