`
zhenghuali168
  • 浏览: 74640 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Java调用远程Shell脚本(转)

阅读更多
最近,需要开发一个Web管理系统,通过Web控制来执行远程Linux主机上的服务脚本,参考了http://lee79.iteye.com/blog/418549和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导航到脚本文件所在的目录,然后传递执行脚本所需要的参数,完成脚本调用执行。
分享到:
评论

相关推荐

    Java调用远程Shell脚本

    Java调用远程Shell脚本是Java开发中一种常见的任务,特别是在需要远程管理系统或者自动化运维的场景下。在本文中,我们将深入探讨如何使用Java来执行远程的Shell命令,以及涉及的相关知识点。 首先,Java调用远程...

    java 远程调用Shell脚本客户端包

    Java 远程调用Shell脚本客户端包是一个实用的工具,专为开发者设计,使得在Java应用程序中执行远程Shell命令变得简单而高效。这个包的主要功能是通过Java代码发起对远程服务器上的Shell脚本的调用,从而实现跨平台的...

    java调用shell命令.pdf

    * 发送文件:我们可以使用 Java 调用 Shell 命令来发送文件,例如使用 `scp` 命令来发送文件到远程服务器。 * 批量任务:我们可以使用 Java 调用 Shell 命令来执行批量任务,例如使用 `bash` 命令来执行批量脚本。 ...

    Java实现windows下远程调用shell脚本

    该工具是基于SSH2协议的实现,在使用它的过程中非常容易,只需要指定合法的用户名口令,或者授权认证文件,就可以创建到远程Linux主机的连接,在建立起来的会话中调用该Linux主机上的脚本文件,执行相关操作。

    Java远程调用Shell脚本并获取输出信息【推荐】

    Java远程调用Shell脚本并获取输出信息 本文主要介绍了Java远程调用Shell脚本并获取输出信息的方法。该方法通过使用Java的SSH客户端来连接远程Linux服务器,执行Shell脚本,并获取输出信息。 一、添加依赖 要使用...

    java调用shell脚本

    在Java编程中,有时我们需要与操作系统进行交互,执行一些系统级别的任务,比如调用Shell脚本。这在处理自动化任务、远程服务器管理或系统集成时非常常见。在给定的资源中,我们可以看到如何在Java中实现这个功能,...

    Java调用shell脚本

    首先,Java调用shell脚本主要通过`Runtime`类或`ProcessBuilder`类来实现。`Runtime.getRuntime().exec()`方法允许我们执行系统命令,而`ProcessBuilder`提供了更灵活的命令构建和环境变量设置功能。下面是一个基本...

    shell脚本远程启动其他服务器的tomcat传输文件自动登录判断启动停止

    这个"shell脚本远程启动其他服务器的tomcat传输文件自动登录判断启动停止"的方案,就是一种典型的自动化运维实践,它结合了多个核心工具和技术,包括shell脚本、expect、ssh以及scp,用于实现远程服务器管理与文件...

    java调用shell

    Java调用Shell脚本是IT专业人士必须掌握的一项技能,它不仅增强了程序的灵活性和功能,还提供了与操作系统底层交互的能力。熟练掌握这一技术,将极大地提升你在项目开发和系统管理中的效率和效果。通过本文的讲解,...

    远程shell调用.rar

    这个“远程shell调用.rar”文件包含了一个基于Java的工具,它允许开发者通过SSH连接到Linux服务器并执行Shell脚本,从而简化了这一过程。 首先,让我们了解一下SSH2。SSH2是SSH协议的第二版,相比SSH1,它提供了更...

    exchange/powershell,Java调用powershell开通邮箱

    标题 "exchange/powershell,Java调用powershell开通邮箱" 暗示了这是一个关于使用Java编程语言调用PowerShell脚本在Exchange服务器上创建邮箱的教程或项目。Exchange是微软提供的一款企业级电子邮件服务器软件,而...

    java远程调用批处理文件代码归总

    例如,你可以创建一个`Runtime.getRuntime().exec()`调用来运行一个包含批处理命令的shell脚本。 接下来,我们讨论TCP双向通信。TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在Java...

    java远程调shell

    至于压缩包中的"java连接shell"文件,可能包含了示例代码、配置文件或者测试脚本,这些资源可以帮助开发者更好地理解和实践Java远程调用Shell的过程。通过学习和研究这些文件,可以加深对这个主题的理解,并能够将...

    JAVA操作linux服务器,本文用于启动shell脚本并返回数据,简单易懂,可随时修改

    总之,通过Java操作Linux服务器并执行shell脚本,可以实现自动化运维、远程数据获取等多种功能。结合Apache Commons库,我们可以编写出高效、可靠的远程管理工具。在实际开发中,一定要注意安全性,例如使用密钥对...

    文摘标题:JAVA带参数调用KETTLE远程服务执行任务

    本资源主要内容包括(资源有保证,都是干货,一看就会): ...2.JAVA传参调用KETTLE远程服务执行任务实现过程及注意事项说明。 3.附件包括:配套说明文档、代码包、KETLLE任务测试文件及数据库脚本。

    如何用java程序(JSch)运行远程linux主机上的shell脚本

    接下来,在Java程序中,你可以使用以下代码来执行远程shell脚本: ```java import com.jcraft.jsch.*; public class RunRemoteScript { private static final String REMOTE_HOST = "1.1.1.1"; private static ...

    Java 调用 Linux shell 命令执行框架:sshxcute

    sshxcute 就是这样一个框架工具集,它基于 JSCH 构建,允许工程师利用Java 代码通过 SSH 连接远程批量执行 Linux/UNIX 系统上的命令或者脚本,同时加入了判断成功与否,取回输出等多种实用功能。sshxcute 不管是针对...

    java+powershell 控制windows

    首先,让我们详细了解如何通过 Java 调用 PowerShell 脚本: 1. **调用 PowerShell 命令**: 在 Java 中,我们可以使用 `java.lang.Runtime.getRuntime().exec()` 方法来执行外部命令。对于 PowerShell,我们需要...

    远程控制主机的SHELL自动化管理 案例

    SHELL脚本作为Linux/Unix系统中的强大工具,可以实现对远程主机的自动化控制,尤其在处理定时任务和远程执行命令时尤为便捷。本案例将探讨如何利用SHELL脚本来定时获取远程主机上的Perl脚本执行结果,并将其记录到...

    ant远程调用shell,启动linux上的tomcat

    本文将深入探讨如何使用Ant工具进行远程调用Shell脚本,以启动Linux服务器上的Tomcat应用服务器。Ant是一个基于Java的任务执行工具,常用于构建和管理Java项目。而Tomcat是一款广泛使用的开源Servlet容器,适用于...

Global site tag (gtag.js) - Google Analytics