java操作Linux服务器可以使用专用的jar包,这里介绍使用jsch操作Linux服务器

maven 依赖

<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.54</version>
</dependency>

引入包以后 获取ssh连接

public static ChannelShell connectShell(Session session) {
ChannelShell shell = null;
try {
shell = (ChannelShell) session.openChannel(type_ssh);
shell.connect();

System.out.println();
System.out.println("shell resource:" + session.equals(shell.getSession()));
System.out.println("shell login ok:" + shell.getId());
System.out.println();
return shell;
} catch (Exception e) {
e.printStackTrace();
}
return shell;
}

以上获取到连接对象可以进行交互操作,在调用方法中定义接收流对象后可以交互执行命令
一下监听和发送都在一个线程中,所以开启定时任务发送命令,主进程监听消息获取
getMsg为接收消息方法
private static PrintStream commander;//定义常量   发送消息使用


BufferedReader br;
try {
OutputStream outputStream = myShellSession_.getChannelShell().getOutputStream();
InputStream inputStream = myShellSession_.getChannelShell().getInputStream();
commander = new PrintStream(outputStream, false, MyShellAndSftpUtils.ENCODING);
br = new BufferedReader(new InputStreamReader(inputStream, MyShellAndSftpUtils.ENCODING));
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
sendMsg("pwd");//定时发送消息
System.out.println("shell run , time is "+DataTimeUtils.getDataStrOut());
}
},0,DataTimeUtils.getaLong(myShellSession_.getConfigParams().getShellTime()));//立即执行 过15分执行 15分 * 60 秒 * 1000毫秒
try {
getMsg();
} catch (Exception e) {
e.printStackTrace();
}

//接收消息调用
public static void getMsg() throws Exception {
StringBuffer buffer = new StringBuffer();
String line;
boolean flag = false;
while ((line = br.readLine()) != null) {
System.out.println("line " + line);
if (line.startsWith("Starting Nmap")) {
flag = true;
}
if (flag) {
buffer.append(line);
buffer.append(MyShellAndSftpUtils.lineSeparator);
}
if (line.startsWith("****:")) {//检测返回信息的开始
flag = false;
saveDb(buffer.toString());//执行存储等逻辑
buffer.setLength(0);
}

}
}

public static void sendMsg(String msg) {
commander.println(msg);
commander.flush();
}

以上方案可以连续执行命令,但是返回的结果需要进行判断后才能进入自己的操作

最新文章

  1. 如何在Ubuntu 14.04服务器上自动化部署Spring Boot的应用
  2. SharePoint 2013 CSOM 对象模型属性包
  3. 探索软件工程道路上的我 V (Θ∀Θ#)
  4. [课程设计]Scrum 1.2 Spring 计划&amp;系统流程&amp;DayOne燃尽图
  5. Permission denied:multiarray.cp35-win_amd64.pyd(tensorflow0.12.0在windows下安装)
  6. 《objective-c基础教程》学习笔记(九)—— Foundation框架介绍
  7. AngularJS 监控对象属性:$watch和$digest
  8. Java基础之序列化对象——反序列化对象(DeserializeObjects)
  9. linux 内核和应用程序区别
  10. mysql之字符集与校对集
  11. 【转载】CentOS 6.4下PXE+Kickstart无人值守安装操作系统
  12. YARN笔记——技术点汇总
  13. Convex(扫描线降维)
  14. 谈谈websocket集群的解决方式
  15. phpmyadmin 上传超过50m限制
  16. shell中括号的特殊用法 linux if多条件判断
  17. kafka集群环境搭建(Linux)
  18. phantomjs 中如何使用xpath
  19. web开发必备的浏览器常识
  20. Java源码阅读(不断补充)

热门文章

  1. SSE图像算法优化系列三十二:Zhang\Guo图像细化算法的C语言以及SIMD指令优化
  2. JDK1.7HashMap源码分析
  3. synchronized下的 i+=2 和 i++ i++执行结果居然不一样
  4. 使用Group By子句的时候,一定要记住下面的一些规则
  5. C++ 炼气期之数据是主角
  6. React Suspense 尝鲜,处理前后端IO异步操作
  7. BUUCTF-另一个世界
  8. SpringBoot之缓存
  9. UiPath程序设计文档
  10. UiPath文本操作Get Full Text的介绍和使用