精华内容
下载资源
问答
  • 1、java远程执行shell脚本类 1 package com.test.common.utility; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.UnsupportedEncodingException; 6 import ...

    1、java远程执行shell脚本类

     1 package com.test.common.utility;
     2 
     3 import java.io.IOException;
     4 import java.io.InputStream;
     5 import java.io.UnsupportedEncodingException;
     6 import java.nio.charset.Charset;
     7 
     8 import org.apache.commons.io.IOUtils;
     9 import org.apache.commons.logging.Log;
    10 import org.apache.commons.logging.LogFactory;
    11 
    12 import ch.ethz.ssh2.ChannelCondition;
    13 import ch.ethz.ssh2.Connection;
    14 import ch.ethz.ssh2.Session;
    15 import ch.ethz.ssh2.StreamGobbler;
    16 
    17 public class RmtShellExecutor {
    18     /** 远程机器IP */
    19     private final String ip;
    20     /** 用户名 */
    21     private final String usr;
    22     /** 密码 */
    23     private final String psword;
    24 
    25    /**
    26      * 构造函数
    27      * 
    28      * @param ip
    29      * @param usr
    30      * @param ps
    31     */
    32     public RmtShellExecutor(String ip, String usr, String ps) {
    33         this.ip = ip;
    34         this.usr = usr;
    35         this.psword = ps;
    36     }
    37 
    38     /**
    39      * 执行脚本
    40      * 
    41      * @param cmds
    42      * @return
    43      * @throws Exception
    44     */
    45     public int exec(String cmds) throws Exception {
    46         InputStream stdOut = null;
    47         InputStream stdErr = null;
    48         String outStr = "";
    49         String outErr = "";
    50         int ret = -1;
    51         try {
    52             if (login()) {
    53                 // Open a new {@link Session} on this connection
    54                 Session session = conn.openSession();
    55                 // Execute a command on the remote machine.
    56                 session.execCommand(cmds);
    57                 stdOut = new StreamGobbler(session.getStdout());
    58                 outStr = processStream(stdOut, charset);
    59                 stdErr = new StreamGobbler(session.getStderr());
    60                 outErr = processStream(stdErr, charset);
    61                 session.waitForCondition(ChannelCondition.EXIT_STATUS, TIME_OUT);
    62                 System.out.println("outStr=" + outStr);
    63                 System.out.println("outErr=" + outErr);
    64                 ret = session.getExitStatus();
    65             } else {
    66                 logger.info("登录远程机器失败" + ip);
    67                 throw new AppException("登录远程机器失败" + ip); // 自定义异常类 实现略
    68             }
    69 
    70         } finally {
    71             if (conn != null) {
    72                 conn.close();
    73             }
    74             IOUtils.closeQuietly(stdOut);
    75             IOUtils.closeQuietly(stdErr);
    76 
    77         }
    78         return ret;
    79 
    80     }
    81 
    82     private String processStream(InputStream in, String charset) throws Exception {
    83         byte[] buf = new byte[1024];
    84         StringBuilder sb = new StringBuilder();
    85         while (in.read(buf) != -1) {
    86             sb.append(new String(buf, charset));
    87         }
    88         return sb.toString();
    89 
    90     }
    91 }
    View Code


    2、调用测试

    1         RmtShellExecutor exe = new RmtShellExecutor("10.190.1.123", "root", "root");
    2         try {
    3             int i = exe.exec("sh /dcdata/etl/runjobinfo/cscscs.sh");
    4             System.out.println(i);
    5         } catch (Exception e) {
    6             e.printStackTrace();
    7             logger.info("执行dsjob错误" + e.getMessage());
    8         }

     更新中。。。

    转载于:https://www.cnblogs.com/Nadim/p/4711235.html

    展开全文
  • Java 远程执行shell脚本

    2020-07-27 13:10:02
    import ch.ethz.ssh2.ChannelCondition; import ch.ethz.ssh2.Connection; import ch.ethz.ssh2....import java.io.IOException; import java.nio.charset.Charset; /** * ClassName: SSHClient * Function: .
    package com.dyjw.information.schoolgateway.common;
    
    import ch.ethz.ssh2.ChannelCondition;
    import ch.ethz.ssh2.Connection;
    import ch.ethz.ssh2.Session;
    
    import java.io.IOException;
    import java.nio.charset.Charset;
    
    /**
     * ClassName: SSHClient
     * Function:  TODO
     * Date:      2020/7/27 11:52
     * author     hanKongbin
     * version    V1.0
     */
    public class SSHClient {
        private String ip;
        private String username;
        private String password;
        private int port;
    
        private String charset = Charset.defaultCharset().toString();
        private static final int TIME_OUT = 1000 * 5 * 60;
    
        private Connection conn;
    
        public SSHClient(String ip, String username, String password, int port) {
            this.ip = ip;
            this.username = username;
            this.password = password;
            this.port = port;
        }
    
    
        /**
         * 登录指远程服务器
         * @return
         * @throws IOException
         */
        public  boolean login() throws IOException {
            conn = new Connection(ip,port);
            conn.connect();
            return conn.authenticateWithPassword(username, password);
        }
    
        /**
         * 执行shell脚本
         * @param shell 远程服务器脚本路径
         * @return
         * @throws Exception
         */
        public int exec(String shell) throws Exception {
            int ret = -1;
            try {
                if (login()) {
                    Session session = conn.openSession();
                    session.execCommand(shell);
                    session.waitForCondition(ChannelCondition.EXIT_STATUS, TIME_OUT);
                    ret = session.getExitStatus();
                } else {
                    throw new Exception("登录远程机器失败" + ip); // 自定义异常类 实现略
                }
            } finally {
                if (conn != null) {
                    conn.close();
                }
            }
            return ret;
        }
    }
    

     

    调用实例:

    public int invokeShell(){
        String command ="sh "+ path;
        SSHClient sshClient = new SSHClient(ip,username,password,port);
        try {
            int status = sshClient.exec(command);
            log.info("执行远程脚本返回状态码->{}"+status);
            return status;
        } catch (Exception e) {
            e.printStackTrace();
            log.error(e.getMessage());
        }
        return -1;
    }
    展开全文
  • Java调用远程Shell脚本

    2013-01-29 22:31:13
    Java调用远程Shell脚本 最近,需要开发一个Web管理系统,通过Web控制来执行远程Linux主机上的服务脚本,参考了http://blog.csdn.net/sheismylife/archive/2009/11/17/4823696.aspx使用的一个小工具,确实很好...

    Java调用远程Shell脚本

    最近,需要开发一个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导航到脚本文件所在的目录,然后传递执行脚本所需要的参数,完成脚本调用执行。

    展开全文
  • java远程执行shell脚本

    2019-10-14 22:01:47
    参考链接: https://www.cnblogs.com/Jacian/p/11493351.html

    参考链接:
    https://www.cnblogs.com/Jacian/p/11493351.html

    展开全文
  • Java通过SSH2协议执行远程Shell脚本

    千次阅读 2018-01-15 01:21:40
    Java通过SSH2协议执行远程Shell脚本(ganymed-ssh2-build210.jar)   使用步骤如下: 1.导包 官网下载: http://www.ganymed.ethz.ch/ssh2/ maven坐标: ch.ethz.ganymed ganymed-ssh2 build...
  • java远程调用shell脚本并获取执行结果代码案例需要用到的依赖 代码案例 public static void main(String[] args) throws Exception { Connection connection = null; BufferedReader bufferedReader = null; // ...
  • 忘记从哪里看的了 做一个笔记 1 pom <!-- shell认证支持 --> <dependency> <groupId>ch.ethz.ganymed</groupId> <artifactId>ganymed-ssh2</...
  • java jsch远程执行shell脚本命令

    千次阅读 2014-06-05 21:16:00
    由于需要远程监控一些Linux主机的运行情况,需要通过java远程执行一些shell脚本,并获取返回值,可以通过jsch实现 jsch jar包下载地址:...
  • java执行本地或远程shell脚本

    千次阅读 2018-10-18 10:10:51
    //执行远程脚本的方式 int inOrOffCode = executor.exec(execString); System.out.println("inOrOffCode---" + inOrOffCode); if(inOrOffCode == -9){ resultInfo = ResultInfo.fail("执行脚本发生未知错误!!...
  • Java SSH远程执行Shell脚本实现

    千次阅读 2015-09-12 08:20:16
    此程序需要ganymed-ssh2-build210.jar包。 ... 为了调试方便,可以将\ganymed-ssh2-build210\src下的代码直接拷贝到我们的工程里, ...此程序的目的是执行远程机器上的Shell脚本。 远程机器IP:***.**.**
  • Java通过SSH2协议执行远程Shell脚本: RemoteShellTool rst = new RemoteShellTool("***","***","****"); String rs1 = rst.exec("ls"); String rs2 = rst.exec("...
  • 此程序的目的是执行远程机器上的Shell脚本。 【环境参数】 远程机器IP:192.168.234.123 用户名:root 密码:root Shell脚本的路径:/home/IFileGenTool/BakProvisionAndOccurEntrance.sh 【具体步骤】 1、在远程...
  • 最近,需要开发一个Web管理系统,通过Web控制来执行远程Linux主机上的服务脚本,参考了http://lee79.iteye.com/blog/418549和http://blog.csdn.net/sheismylife/archive/2009/11/17/4823696.aspx使用的一个小工具,...
  • Java SSH远程执行Shell脚本实现(转)

    千次阅读 2013-04-26 17:13:50
    Java SSH远程执行Shell脚本实现 此程序需要ganymed-ssh2-build210.jar包。 下载地址:http://www.ganymed.ethz.ch/ssh2/ 为了调试方便,可以将\ganymed-ssh2-build210\src下的代码直接拷贝到我们的工程里, 此...
  • Java执行shell脚本关闭远程数据库

    千次阅读 2015-07-27 11:30:20
    本实例为用Java执行shell脚本启动或关闭远程Mysql数据库,需求原因:游戏服务器合服后,为了节省内存消耗,需要关闭合服后的服务器不必要的数据库(一台服务器主机存在多个MySql数据库),以提高服务器性能,但有时...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 245
精华内容 98
关键字:

java执行远程shell脚本

java 订阅