1:通过使用RuntimeUtil方法
maven引入hutool包
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.10</version>
</dependency>
java中代码如下,如此即可调用linux中的脚本,
RuntimeUtil.exec("sh script.sh");
优点:方法简单,秩序一行代码即可实现执行linux命令
缺点:只能程序所在服务器以及程序所属用户执行命令,灵活度低,想要执行多条命令得开启多个session
2:通过JschUtils方法,依旧是hutool包下面的工具类
public class ExecShellUtil {
/**
* 执行脚本
*
* @param user 用户名
* @param host IP地址
* @param port 端口号
* @param commands 脚本数据
* @param password 密码
* @param preKey 密钥
* @return
* @author fengdf
*/
public static void exec(String user, String host, int port, String[] commands,String password,String preKey) {
JSch jsch = new JSch();
Session session = null;
try {
//1.创建session
session = JschUtil.createSession(jsch, shellData.getHost(), Integer.parseInt(shellData.getPort()), shellData.getUser());
//密码登录
if (){
session.setPassword(password);
log.info("密码登录:{}",password));
}else {
//2.添加密钥preKey登录
jsch.addIdentity(null,preKey.getBytes(),null,null);
}
//3.连接
session.connect();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
//exec()可以通过outputStream拿到执行shell失败时的返回提示
String execResult = JschUtil.exec(session, commands, CharsetUtil.CHARSET_UTF_8, outputStream);
//执行失败时execResult返回null
if (StrUtil.isEmpty(execResult)){
//4.打印错误日志
log.info("err:{}",outputStream.toString("UTF-8"));
}else {
log.info("success:{}",execResult);
}
} catch (Exception e) {
//设置执行失败的响应内容
result.setResponseBody(e.getMessage());
log.error("shell脚本异常:{}", shellData.getShellContent());
log.error("发送请求异常", e);
} finally {
JschUtil.close(session);
}
return;
}
}
可输入通过user,ip,port,command,password执行命令
优点:可指定user,ip,port等信息连接linux服务器,一个session可执行多条命令,灵活度相当高
缺点:需要自己处理会话中出现的各种异常问题