当前位置: 首页 > news >正文

java 远程 shell脚本_Java 远程调用 shell脚本

* pom.xml 引入相关jar包

```

ch.ethz.ganymed

ganymed-ssh2

262

```

* 远程服务器上代码

```

#/bin/bash

echo  "hello world"

```

* 相关Java代码

```

public class RemoteShellExecutor {

private Connection conn;

private String ip;

private String osUserName;

private String password;

private String charset = Charset.defaultCharset().toString();

private static final int TIME_OUT = 1000 * 5 * 60;

public RemoteShellExecutor(String ip, String username, String password) {

this.ip = ip;

this.osUserName = username;

this.password = password;

}

private boolean login() throws IOException {

conn = new Connection(ip);

conn.connect();

return conn.authenticateWithPassword(osUserName, password);

}

public int exec(String cmds) throws IOException {

InputStream stdOut = null;

InputStream stdErr = null;

String outStr = "";

String outErr = "";

int ret = 1;

if (login()) {

try {

Session session = conn.openSession();

session.execCommand(cmds);

stdOut = new StreamGobbler(session.getStdout());

outStr = processStream(stdOut, charset);

stdErr = new StreamGobbler(session.getStderr());

outErr = processStream(stdErr, charset);

session.waitForCondition(ChannelCondition.EXIT_STATUS, TIME_OUT);

System.out.println("outStr = " + outStr);

System.out.println("outErr = " + outErr);

ret = session.getExitStatus();

} finally {

if (conn != null) {

conn.close();

}

IOUtils.closeQuietly(stdOut);

IOUtils.closeQuietly(stdErr);

}

}

return ret;

}

public String processStream(InputStream in, String charset)

throws UnsupportedEncodingException, IOException {

byte[] buf = new byte[1024];

StringBuilder sb = new StringBuilder();

while (in.read(buf) != -1) {

sb.append(new String(buf, charset));

}

return sb.toString();

}

public static void main(String[] args) throws IOException {

RemoteShellExecutor rse = new RemoteShellExecutor("IP", "root", "12312");

System.out.println(rse.exec("/root/test_shell.sh"));

}

}

```

* 输出结果     ``` outStr = hello world outErr =  0 ```

相关文章:

  • python自动化数据驱动_Selenium2+python自动化之数据驱动(ddt)
  • java圆和椭圆的关系_圆与椭圆 - brifuture - 博客园
  • java attributelist_java集合类(二)List学习
  • java ccf认证解答_CCF认证考试(java)---窗口
  • java 平滑 停止_设计Java应用程序的平滑停止
  • java开发按键精灵_Java 按键精灵
  • java同步开销_java – 为什么对Map的同步访问会增加大量的开销
  • java字节码常量池_Java字节码常量池深度剖析与字节码整体结构分解
  • java控制语句案例_Java基础之流程控制(示例代码)
  • mysql 怎么设置ip地址_Mysql如何设置用户指定ip地址操作数据库
  • android_iphone和java三个平台一致的加密方法_Android、iPhone和Java三个平台一致的加密工具...
  • java最崇拜谁_蓝桥杯(java)个人赛真题:小朋友崇拜圈
  • java数组函数结局实际问题_java函数与数组
  • java登录字符串封装_JAVA的随机的字符串的封装(基本上够用了)
  • java统一管理文字_为了统一管理组件和容器,Java为所有组件类定义的超类
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • AngularJS指令开发(1)——参数详解
  • C++入门教程(10):for 语句
  • js对象的深浅拷贝
  • ng6--错误信息小结(持续更新)
  • Python语法速览与机器学习开发环境搭建
  • 工作手记之html2canvas使用概述
  • 记录一下第一次使用npm
  • 来,膜拜下android roadmap,强大的执行力
  • 嵌入式文件系统
  • 网页视频流m3u8/ts视频下载
  • 在Unity中实现一个简单的消息管理器
  • 智能合约Solidity教程-事件和日志(一)
  • Prometheus VS InfluxDB
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​香农与信息论三大定律
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (C++20) consteval立即函数
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • ?
  • @html.ActionLink的几种参数格式
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @我的前任是个极品 微博分析
  • [2008][note]腔内级联拉曼发射的,二极管泵浦多频调Q laser——
  • [2019.3.5]BZOJ1934 [Shoi2007]Vote 善意的投票
  • [2021ICPC济南 L] Strange Series (Bell 数 多项式exp)
  • [AIGC] MySQL存储引擎详解
  • [Ariticle] 厚黑之道 一 小狐狸听故事
  • [AutoSar]工程中的cpuload陷阱(三)测试
  • [BT]BUUCTF刷题第8天(3.26)
  • [BUG]Datax写入数据到psql报不能序列化特殊字符
  • [BUUCTF]-PWN:[极客大挑战 2019]Not Bad解析
  • [Cocoa]iOS 开发者账户,联机调试,发布应用事宜
  • [hdu 3746] Cyclic Nacklace [kmp]
  • [hdu4622 Reincarnation]后缀数组
  • [IE编程] 如何获得IE版本号
  • [IMX6DL] CPU频率调节模式以及降频方法