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

远程执行shell命令

    博客分类:
  • java
阅读更多

 

 

 

import com.jcraft.jsch.*;
import com.xx.dc.beans.Progress;
import com.xx.dc.beans.ProgressMessage;
import com.xx.dc.service.SessionManager;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.io.*;
import java.util.Arrays;
import java.util.Date;
import java.util.List;


public class ShellUtils {
    private static Log log = LogFactory.getLog(ShellUtils.class);


    public static Session getSession(String user, String passwd, String host) throws JSchException {

        JSch jsch = new JSch();
        Session session = jsch.getSession(user, host, 22);
        session.setPassword(passwd);

        java.util.Properties config = new java.util.Properties();
        config.put("StrictHostKeyChecking", "no");
        session.setConfig(config);
        session.connect();
        return session;
    }

    /**
     * 执行相关的命令
     * @throws JSchException
     */
    public static void execCmd(String command, String user, String passwd, String host, final String processID) throws JSchException {
        execCmd(command, user, passwd, host, processID, null);
    }

    public static void execCmd(Session session, String command, final String processID, PrintStream ps) throws JSchException {
        StringBuilder ret = new StringBuilder();

        BufferedReader reader = null;
        Channel channel = null;

        try {
            channel = session.openChannel("exec");
            ((ChannelExec) channel).setCommand(command);

            channel.setInputStream(null);
            ((ChannelExec) channel).setErrStream(new ErrorOutputStream(new IWriter() {
                @Override
                public void write(String content) {
                        trace(processID, content);
                }

                @Override
                public void write(String content, Exception e) {
                        trace(processID, content, e);
                }
            }));

            channel.connect();
            InputStream in = channel.getInputStream();
            reader = new BufferedReader(new InputStreamReader(in));
            String buf = null;
            while ((buf = reader.readLine()) != null) {
                if (ps != null) {
                    ps.println(buf);
                }
                    trace(processID, buf);
            }
        } catch (IOException e) {
            trace(processID, e.getMessage(), e);
        } catch (JSchException e) {
            trace(processID, e.getMessage(), e);
        } finally {
            try {
                channel.disconnect();
                reader.close();
            } catch (IOException e) {
                trace(processID, e.getMessage(), e);
            }
        }
    }

    /**
     * 执行相关的命令
     * @throws JSchException
     */
    public static void execCmd(String command, String user, String passwd, String host, final String processID, PrintStream ps) throws JSchException {

        Session session = getSession(user, passwd, host);
        try {
            execCmd(session, command, processID, ps);
        } finally {
            session.disconnect();
        }

    }

    private static void trace(String processID, String message) {
        trace(processID, message, null);
    }

    private static void trace(String processID, String message, Throwable e) {
        MemCachedManager memCachedManager = MemCachedManager.getInstance();
        Object progress = memCachedManager.get(processID);
        if (progress == null) {
            progress = new Progress(processID);
        }
        List<ProgressMessage> messages = ((Progress) progress).getMessages();

        if (e == null) {
            log.info("[Shell Processing:" + processID + "]" + message);
            messages.add(new ProgressMessage(message));
        } else {
            messages.add(new ProgressMessage(message, true));
            if (!StringUtils.isEmpty(e.getMessage())) {
                messages.add(new ProgressMessage("Error details:" + e.getMessage(), true));
                log.error("[Shell Processing:" + processID + "]" + message, e);

            } else {
                log.error("[Shell Processing:" + processID + "]" + message);
            }
            ((Progress) progress).setHasError(true);
        }


        Date expiry = new Date(System.currentTimeMillis() + (1000 * 60 * 60));// 有效期一个小时
        memCachedManager.set(processID, progress, expiry);
    }

    public static void main(String[] args) {
        try {

            execCmd("hadoop distcp -overwrite hdfs://172.18.149.42:50070/tmp/dmp/ode/all_click_stream_data hdfs://yh/dmp/external/ode/all_click_stream_data", "dmp", "1234qwer", "172.18.149.134", "test");
//System.out.println(System.getProperty("line.separator"));

        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

 

分享到:
评论

相关推荐

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

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

    boyurl 远程执行shell脚本工具

    由于它允许远程执行shell命令,如果不加以限制,可能会成为恶意攻击的入口。因此,你需要确保只信任的源可以访问`boyurl.php`,并使用HTTPS等加密协议来保护通信的安全。此外,还可以通过设置访问控制列表(ACLs)、...

    通过PHP来远程执行shell脚本工具 整个程序只有两个文件,一个PHP文件,一个shell安装脚本,易于使用和安装

    一个通过PHP来远程执行shell脚本工具。整个程序只有两个文件,一个PHP文件,一个shell安装脚本,易于使用和安装。支持PHP5.2+以上的版本。提供的功能包括: 1:用户登录注销。 2:记录每次使用的IP,方便审计。 3...

    (接上篇博客)Java SSH远程执行Shell脚本实现

    在本篇博客中,我们将探讨如何使用Java通过SSH远程执行Shell脚本,这对于系统管理和自动化任务非常有用。我们将重点关注`ExecuteRemoteShell.java`这个文件,它应该包含了实现这一功能的核心代码。 首先,为了实现...

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

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

    java调用shell命令.pdf

    在 Java 中调用 Shell 命令是非常常见的操作,特别是在需要执行系统命令或脚本时。在这个例子中,我们将看到如何使用 Java 调用 Shell 命令,并介绍相关的知识点。 Java 调用 Shell 命令的必要性 在实际开发中,...

    Java实现远程执行SHELL

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

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

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

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

    在这个场景中,shell脚本被用来组织和执行一系列步骤,包括登录远程服务器、传输文件、监控Tomcat服务的状态以及控制其启动和停止。 接下来是expect工具。Expect是一个用于自动化交互式进程的Tcl扩展,它可以模拟...

    远程执行命令脚本,可传密码

    linux下远程执行命令脚本,可传密码,提升权限

    【Spring boot配置模板】java远程执行shell命令(支持向多主机发起远程命令)

    【Spring Boot配置模板】Java远程执行Shell命令(支持向多主机发起远程命令) 在软件开发过程中,有时我们需要对远程服务器进行操作,例如自动化部署、监控或者执行特定的任务。在这种情况下,能够通过程序远程执行...

    Spring Boot调用 Shell 脚本实现看门狗功能

    3.接着,在 Spring Boot 应用程序中,使用 @Component 注解将 Shell 脚本的执行逻辑实现。 四、Shell 脚本实现看门狗功能的优点 使用 Spring Boot 调用 Shell 脚本实现看门狗功能的优点是可以实现更多的功能,如...

    Java调用远程Shell脚本

    在本文中,我们将深入探讨如何使用Java来执行远程的Shell命令,以及涉及的相关知识点。 首先,Java调用远程Shell脚本的核心依赖是SSH(Secure Shell),这是一种网络协议,用于在不安全的网络上提供安全的远程登录...

    java Sokcet远程调用shell

    Java Socket远程调用Shell是一种通过Java程序利用Socket通信协议实现对远程服务器的Shell命令执行的技术。这种方式常用于系统管理、自动化运维或者分布式系统的组件交互。下面将详细介绍这一技术的实现原理、步骤...

    远程shell调用.rar

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

    shell2http, 通过HTTP服务器执行 shell 命令.zip

    shell2http, 通过HTTP服务器执行 shell 命令 shell2http 用于执行 shell 命令的http服务器。 为开发,Prototype或者远程控制而设计。 通过两个 命令行 参数,路径和 shell 命令设置。 默认情况下绑定到:8080.用法

    JAVA执行shell命令小工具

    因此,这个“JAVA执行shell命令小工具”可能依赖于Ganymed SSH2库来实现远程执行shell命令的功能。 在实际应用中,使用Java执行shell命令和SSH连接有多种场景,例如自动化运维、分布式系统管理、跨平台数据同步等。...

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

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

    java远程调shell

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

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

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

Global site tag (gtag.js) - Google Analytics