使用springboot对linux进行操控的方法示例

网友投稿 598 2023-03-07

使用springboot对linux进行操控的方法示例

使用springboot对linux进行操控的方法示例

1,在pom中导入

ganymed-ssh2

build210http://

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 sthttp://dout = 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"

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:校招小程序插件怎么用的(校招薪资小程序)
下一篇:vue3(vue3双向绑定原理)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~