使用springboot对linux进行操控的方法示例
1,在pom中导入
ch.ethz.ganymed ganymed-ssh2 build210
2,编写工具类
packageorg.jeecg.modules.system.util; /** *@Description: *@Author:LGX *@Date:2020/11/1910:36 */ importch.ethz.ssh2.Connection; importch.ethz.ssh2.Session; importch.ethz.ssh2.StreamGobbler; importlombok.AllArgsConstructor; importlombok.Data; importlombok.NoArgsConstructor; importlombok.extern.slf4j.Slf4j; importorg.apache.commons.lang.StringUtils; importorg.springframework.beans.factory.annotation.Value; importorg.springframework.stereotype.Component; importjava.io.*; /** *远程执行linux的shellscript *@authorIckes *@sinceV0.1 */ @Data @NoArgsConstructor @AllArgsConstructor @Slf4j @Component publicclassRemoteExecuteCommandutil{ //字符编码默认是utf-8 privatestaticStringDEFAULTCHART="UTF-8"; privateConnectionconn; @Value(value="${jeecg.linux.ip}") publicStringip; @Value(value="${jeecg.linux.userName}") publicStringuserName; @Value(value="${jeecg.linux.userPwd}") publicStringuserPwd; /** *远程登录linux的主机 *@authorIckes *@sinceV0.1 *@return *登录成功返回true,否则返回false */ publicBooleanlogin(){ booleanflg=false; try{ conn=newConnection(ip); conn.connect();//连接 flg=conn.authenticateWithPassword(userName,userPwd);//认证 }catch(IOExceptione){ e.printStackTrace(); } returnflg; } /** *@authorIckes *远程执行shll脚本或者命令 *@paramcmd *即将执行的命令 *@return *命令执行完后返回的结果值 *@sinceV0.1 */ publicStringexecute(Stringcmd){ Stringresult=""; try{ if(login()){ Sessionsession=conn.openSession();//打开一个会话 session.execCommand(cmd);//执行命令 result=processStdout(session.getStdout(),DEFAULTCHART); //如果为得到标准输出为空,说明脚本执行出错了 if(StringUtils.isBlank(result)){ result=processStdout(session.getStderr(),DEFAULTCHART); } conn.close(); session.close(); } }catch(IOExceptione){ e.printStackTrace(); } returnresult; } /** *@authorIckes *远程执行shll脚本或者命令 *@paramcmd *即将执行的命令 *@return *命令执行成功后返回的结果值,如果命令执行失败,返回空字符串,不是null *@sinceV0.1 */ publicStringexecuteSuccess(Stringcmd){ Stringresult=""; try{ if(login()){ Sessionsession=conn.openSession();//打开一个会话 session.execCommand(cmd);//执行命令 result=processStdout(session.getStdout(),DEFAULTCHART); conn.close(); session.close(); } }catch(IOExceptione){ e.printStackTrace(); } returnresult; } /** *解析脚本执行返回的结果集 *@authorIckes *@paramin输入流对象 *@paramcharset编码 *@sinceV0.1 *@return *以纯文本的格式返回 */ privateStringprocessStdout(InputStreamin,Stringcharset){ InputStreamstdout=newStreamGobbler(in); StringBufferbuffer=newStringBuffer();; try{ BufferedReaderbr=newBufferedReader(newInputStreamReader(stdout,charset)); Stringline=null; while((line=br.readLine())!=null){ buffer.append(line+"\n"); } }catch(UnsupportedEncodingExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); } returnbuffer.toString(); } }
3,yml里编写配置信息
jeecg: linux: ip:192.168.xxx.xxx userName:root userPwd:123456
4,注入工具类,编写命令
@Autowired privateRemoteExecuteCommandutilCommandutil; @GetMapping(value="/training") publicStringtraining(@RequestParam(name="cmd")Stringcmd){ //Stringa="sh/opt/shops/test1.sh13"; //命令返回的信息 StringcmdInformation=Commandutil.execute("source/etc/profile;"+cmd); returncmdInformation; }
由于ssh连接无法自动获取环境变量的值,得再执行前面加入source/etc/profile;来手动识别,如果还是不行可以在/etc/profile末尾加入exportPATH="$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
到此这篇关于使用springboot对linux进行操控的方法示例的文章就介绍到这了,更多相关springbootlinux操控内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。