Java调用远程Shell脚本(待验证)
来源:互联网 发布:淘宝大图轮播 编辑:程序博客网 时间:2024/06/05 06:56
最近,需要开发一个Web管理系统,通过Web控制来执行远程Linux主机上的服务脚本,参考了http://blog.csdn.net/sheismylife/archive/2009/11/17/4823696.aspx使用的一个小工具,确实很好地解决了这个问题,做个记录,以供查阅。
这个小工具打成一个jar文件:ganymed-ssh2-build210.jar,可以在http://www.ganymed.ethz.ch/ssh2/处下载。该工具是基于SSH2协议的实现,在使用它的过程中非常容易,只需要指定合法的用户名口令,或者授权认证文件,就可以创建到远程Linux主机的连接,在建立起来的会话中调用该Linux主机上的脚本文件,执行相关操作。
下面是我基于ganymed-ssh2-build210.jar库,写的一个Demo,代码如下所示:
package org.shirdrn.shell;import java.io.IOException;import java.io.InputStream;import java.nio.charset.Charset;import ch.ethz.ssh2.Connection;import ch.ethz.ssh2.Session;/*** 远程Shell脚本执行工具** @author Administrator*/public class RemoteShellTool {private Connection conn;private String ipAddr;private String charset = Charset.defaultCharset().toString();private String userName;private String password;public RemoteShellTool(String ipAddr, String userName, String password, String charset) { this.ipAddr = ipAddr; this.userName = userName; this.password = password; if(charset != null) { this.charset = charset; }}/*** 登录远程Linux主机** @return* @throws IOException*/public boolean login() throws IOException { conn = new Connection(ipAddr); conn.connect(); // 连接 return conn.authenticateWithPassword(userName, password); // 认证}/*** 执行Shell脚本或命令** @param cmds 命令行序列* @return*/public String exec(String cmds) { InputStream in = null; String result = ""; try { if (this.login()) { Session session = conn.openSession(); // 打开一个会话 session.execCommand(cmds); in = session.getStdout(); result = this.processStdout(in, this.charset); conn.close(); } } catch (IOException e1) { e1.printStackTrace(); } return result;}/*** 解析流获取字符串信息** @param in 输入流对象* @param charset 字符集* @return*/public String processStdout(InputStream in, String charset) { byte[] buf = new byte[1024]; StringBuffer sb = new StringBuffer(); try { while (in.read(buf) != -1) { sb.append(new String(buf, charset)); } } catch (IOException e) { e.printStackTrace(); } return sb.toString();}}
需要说明的一点是,执行脚本以后,可以获取脚本执行的结果文本,需要对这些文本进行正确编码后返回给客户端(我们的Web管理控制台),才能看到实际脚本执行的结果。
另外,当执行login方法时,登录成功,位于当前的***.***.***.***:/home/username/目录之下,你可以指定脚本文件所在的绝对路径,或者通过cd导航到脚本文件所在的目录,然后传递执行脚本所需要的参数,完成脚本调用执行。
http://hi.baidu.com/shirdrn/blog/item/59223b129a7322c5c3fd78a9.html
- Java调用远程Shell脚本(待验证)
- Java调用远程Shell脚本
- Java调用远程Shell脚本
- java 远程调用shell脚本
- java远程调用shell脚本
- java远程调用shell脚本
- ZZ Java远程调用shell脚本
- windows下java远程调用shell脚本
- java 远程调用shell脚本demo
- Java程序调用远程Shell脚本
- java怎么调用远程服务器中的Shell脚本 一
- java怎么调用远程服务器上的shell脚本 二参数调用远程
- java调用Shell脚本
- java调用Shell脚本
- JAVA 调用shell脚本
- Java 调用Shell脚本
- shell脚本调用java
- Java调用shell脚本
- 开源前端框架纵横谈
- 0.0.0.0 与 127.0.0.1的区别
- sql server 查看对象定义的方法
- HttpServletRequest和ServletRequest的区别
- MongoDB 无法启动 - wzm112的专栏 - 博客频道 - CSDN.NET
- Java调用远程Shell脚本(待验证)
- hdu 1001 Sum Problem
- QTP中关于对webelement的处理。
- 第一次和第二次的执行计划为啥不一样
- TMS320F28035入门教程
- JRE更新包导致的INIT FAILED (mux thread)
- Oracle 查询并删除重复记录的SQL语句
- 超好用的plsql设置
- vc6.0远程调试