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

java执行远程 linux shell命令,并拿到返回值

阅读更多

 

 

 

package com.pasier.xxx.util;

import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import ch.ethz.ssh2.ChannelCondition;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;

public class RmtShellExecutor {

    private static final Logger LOG = LoggerFactory.getLogger(RmtShellExecutor.class);

    private Connection conn;
    private String ip;
    private String usr;
    private String psword;
    private String charset = Charset.defaultCharset().toString();

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

    public RmtShellExecutor(String ip, String usr, String ps) {
        this.ip = ip;
        this.usr = usr;
        this.psword = ps;
    }

    private boolean login() throws IOException {
        conn = new Connection(ip);
        conn.connect();
        return conn.authenticateWithPassword(usr, psword);
    }

    public String exec(String cmds) throws IOException {
        InputStream stdOut = null;
        InputStream stdErr = null;
        String outStr = "";
        String outErr = "";
        int ret = -1;

        try {
            if (login()) {
                Session session = conn.openSession();
                session.execCommand(cmds);
                stdOut = new StreamGobbler(session.getStdout());
                outStr = processStream(stdOut, charset);
                LOG.info("caijl:[INFO] outStr=" + outStr);
                stdErr = new StreamGobbler(session.getStderr());
                outErr = processStream(stdErr, charset);
                LOG.info("caijl:[INFO] outErr=" + outErr);
                session.waitForCondition(ChannelCondition.EXIT_STATUS, TIME_OUT);
                ret = session.getExitStatus();

            } else {
                LOG.error("caijl:[INFO] ssh2 login failure:" + ip);
                throw new IOException("SSH2_ERR");
            }

        } finally {
            if (conn != null) {
                conn.close();
            }
            if (stdOut != null)
                stdOut.close();
            if (stdErr != null)
                stdErr.close();
        }

        return outStr;
    }

    private String processStream(InputStream in, String charset) throws 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) {

        String usr = "root";
        String password = "12345";
        String serverIP = "11.22.33.xx";
        String shPath = "/root/ab.sh";

        RmtShellExecutor exe = new RmtShellExecutor(serverIP, usr, password);

        String outInf;

        try {
             String[] cmd = {"/bin/sh", "-c", shPath +" "+paramater};
            outInf = exe.exec(cmd);
            System.out.println("outInf= " + outInf);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

 

分享到:
评论

相关推荐

    java执行远程linux服务器命令

    首先,要实现这个功能,我们需要借助SSH(Secure Shell)协议,它提供了安全的网络服务,允许远程登录到Linux服务器并执行命令。Java中有多个库可以支持SSH连接,例如JSch和Apache SSHD。这里我们以更常用的JSch为例...

    java控制台输入cmd命令, ssh远程linux shell命令, 并打印命令输出到控制台

    在Java编程中,有时我们需要与操作系统进行交互,执行系统级别的命令,例如在控制台执行CMD命令或者通过SSH连接远程Linux服务器执行shell命令。这在自动化脚本、系统管理或者远程监控等场景中非常常见。本篇文章将...

    java连接linux,执行shell命令的工具类 sshxcute.jar

    在Java开发中,有时我们需要远程连接到Linux服务器执行shell命令,比如进行系统管理、自动化运维或者数据处理等任务。在这种情况下,使用SSH(Secure Shell)协议是常见的解决方案,因为它提供了安全的网络通信。...

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

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

    jenkins 执行远程linux命令

    本文将详细介绍如何在Jenkins中配置并执行远程Linux命令。 #### 二、准备工作 在开始配置前,请确保以下几点: 1. **Jenkins已安装**:确保您的系统中已经安装了Jenkins。 2. **SSH Plugin**:在Jenkins中安装并...

    Java实现远程执行SHELL

    Java实现远程执行SHELL, JAVA实现远程登陆执行shell脚本。上传文件到远程服务器,下载远程服务器资源。 ShellExecutor exe = new ShellExecutor("192.168.1.1", 22, "USERNAME", "PASSWORD"); if (exe.login()) {...

    LINUX SHELL命令练习题

    LINUX SHELL 命令练习题 本次练习题涵盖了 LINUX SHELL commands 的多个方面,包括文件类型的确定、文件权限的修改、目录管理、文件重命名、系统初始化信息、系统启动级别的切换、后台执行程序、vi 编辑器的使用等...

    java-telnet连接远程服务器并执行shell命令

    java-telnet连接远程服务器并执行shell命令 具体代码 java-telnet

    java开发的swing客户端,远程执行linux命令.zip

    具体来说,开发者可能使用了Java的SSH(Secure Shell)库,如JSch或者Apache MINA,这些库提供了与远程Linux服务器安全连接并执行命令的能力。 SSH协议是一种在网络上传输数据的安全方式,通常用于远程登录、文件...

    JAVA执行shell命令小工具

    Ganymed SSH2库允许Java应用程序通过SSH连接到其他系统,并执行包括shell命令在内的各种任务。因此,这个“JAVA执行shell命令小工具”可能依赖于Ganymed SSH2库来实现远程执行shell命令的功能。 在实际应用中,使用...

    Linux下Shell命令解释步骤程序实现

    本文将详细讲解 Linux Shell 命令解释步骤的实现过程,包括打印提示符、得到命令行、解析命令、查找文件、准备参数和执行命令等步骤。 打印提示符 在 Linux Shell 中,打印提示符是 Shell 解释命令的第一步。 ...

    java调用shell命令.pdf

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

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

    3. **Shell脚本执行**:在SSH连接建立后,Java程序可以通过执行`exec`命令来运行远程服务器上的Shell脚本。脚本可以包含任意的Linux或Unix命令,甚至复杂的流程控制语句。 4. **输入/输出流处理**:为了获取Shell...

    java Sokcet远程调用shell

    4. 服务器端接收到命令后,使用Runtime或ProcessBuilder类执行Shell命令,并获取命令执行结果。 5. 服务器端将命令执行的结果通过Socket回传给客户端。 6. 客户端接收并处理服务器返回的数据,可能包括命令执行的...

    最牛B的 Linux Shell 命令

    最牛B的 Linux Shell 命令,最牛B的 Linux Shell 命令,

    基于Linux Shell命令的用户异常操作检测方法研究.pdf

    本文还讨论了Linux Shell命令在异常操作检测中的应用,并对该方法的优缺点进行了分析。本文提出的基于Linux Shell命令的用户异常操作检测方法可以满足数据中心安全需求,提高数据中心的安全性和可靠性。 Linux ...

    java远程调shell

    Java远程调用Shell是一种技术,它允许通过Java程序执行远程服务器上的操作系统命令,这在系统集成、自动化运维或跨平台任务调度中非常有用。这里,我们深入探讨如何实现这一功能,以及涉及的关键知识点。 首先,...

    linux shell命令tr的用法

    linux shell命令tr的用法

    Java远程登录Linux调用shell

    java远程登录Linux,并执行shell命令。

    java连接Linux执行shell脚本,命令

    java连接服务器,并执行Linux服务器上的命令或脚本

Global site tag (gtag.js) - Google Analytics