使用springboot對linux進行操控
1,在pom中匯入
<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.*;
/**
* 遠端執行linux的shell script
* @author Ickes
* @since V0.1
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Slf4j
@Component
public class RemoteExecuteCommandutil {
//字元編碼預設是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;
/**
* 遠端登入linux的主機
* @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);//認證
} catch (IOException e) {
e.printStackTrace();
}
return flg;
}
/**
* @author Ickes
* 遠端執行shll指令碼或者命令
* @param cmd
* 即將執行的命令
* @return
* 命令執行完後返回的結果值
* @since V0.1
*/
public String execute(String cmd){
String result="";
try {
if(login()){
Session session= conn.openSession();//開啟一個會話
session.execCommand(cmd);//執行命令
result=processStdout(session.getStdout(),DEFAULTCHART);
//如果為得到標準輸出為空,說明指令碼執行出錯了
if(StringUtils.isBlank(result)){
result=processStdout(session.getStderr(),DEFAULTCHART);
}
conn.close();
session.close();
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
/**
* @author Ickes
* 遠端執行shll指令碼或者命令
* @param cmd
* 即將執行的命令
* @return
* 命令執行成功後返回的結果值,如果命令執行失敗,返回空字串,不是null
* @since V0.1
*/
public String executeSuccess(String cmd){
String result="";
try {
if(login()){
Session session= conn.openSession();//開啟一個會話
session.execCommand(cmd);//執行命令
result=processStdout(session.getStdout(),DEFAULTCHART);
conn.close();
session.close();
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
/**
* 解析指令碼執行返回的結果集
* @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連線無法自動獲取環境變數的值,得再執行前面加入source /etc/profile;來手動識別,如果還是不行可以在/etc/profile末尾加入export PATH="$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
相關文章
- 使用springboot對各層的程式碼進行測試!Spring Boot
- springboot中加入druid對sql進行監控Spring BootUISQL
- 使用 SOS 對 Linux 中執行的 .NET Core 進行問題診斷Linux
- springboot~configserver裡對重要資訊進行RSA加密Spring BootGseServer加密
- SpringBoot--- 使用SpringSecurity進行授權認證Spring BootGse
- 如何使用 apt 進行 Linux 包管理APTLinux
- 使用 Sysbench 進行 Linux 效能測試Linux
- 對 LLM 工具使用進行統一
- Linux埠對映是什麼?如何進行埠對映?Linux
- springboot2.0使用外部tomcat進行啟動方法Spring BootTomcat
- 使用SpringBoot進行優雅的資料驗證Spring Boot
- SpringBoot介面 - 如何優雅的對引數進行校驗?Spring Boot
- 在linux系統中對檔案進行分割Linux
- Springboot使用ResponseBodyAdvice進行統一返回介面資料格式的使用Spring Boot
- 使用 OSProfiler 對 OpenStack 進行效能測量
- 使用ffmpeg對視訊進行TS切片
- 使用cJSON庫對JSON格式進行解析JSON
- Netty整合SpringBoot並使用Protobuf進行資料傳輸NettySpring Boot
- 在Linux中,如何在Linux中使用LXD進行容器管理?Linux
- 雲伺服器用ssm工具對linux進行擴容伺服器SSMLinux
- 使用EVOLVEpro對蛋白質熱穩定性進行定向進化
- 使用LVM對系統盤進行擴容LVM
- .NET CORE 中使用AutoMapper進行物件對映APP物件
- Terraform 系列-使用Dynamic Blocks對Blocks進行迭代ORMBloC
- 使用 locust 對 mysql 語句進行壓測MySql
- 使用更新補丁對Android Studio進行更新。Android
- 使用Collections對list的內容進行排序排序
- 如何使用Nginx對Artifactory進行http應用NginxHTTP
- 使用網頁前端JavaScript使用RSA對長字串進行加密及測試解密,1024位可對長字串進行網頁前端JavaScript字串加密解密
- 使用 Linux 命令列與其他使用者進行通訊Linux命令列
- Linux命令列:對內容進行大小寫字元轉換 Linux命令列字元
- Linux中如何使用systemctl進行服務的管理?Linux
- 使用vs2019進行Linux遠端開發Linux
- 使用linux的ffmpeg進行B站直播推流Linux
- Rasa中使用lookup table時針對中文對RegexEntityExtractor進行修改
- SpringBoot整合Netty並使用Protobuf進行資料傳輸(附工程)Spring BootNetty
- springboot整合redis2.x,使用spring註解進行快取Spring BootRedis快取
- 使用SpringBoot JPA進行自定義的儲存及批量儲存Spring Boot