当前位置:首页 > 开发 > 开源软件 > 正文

【Java】Java执行远程机器上Linux命令

发表于: 2014-09-19   作者:bit1129   来源:转载   浏览:
摘要: Java使用ethz通过ssh2执行远程机器Linux上命令,   封装定义Linux机器的环境信息   package com.tom; import java.io.File; public class Env { private String hostaddr; //Linux机器的IP地址 private Integer po

Java使用ethz通过ssh2执行远程机器Linux上命令,

 

封装定义Linux机器的环境信息

 

package com.tom;


import java.io.File;

public class Env {
    private String hostaddr; //Linux机器的IP地址
    private Integer port; //SSH访问端口,默认22
    private String username; //通过用户名密码访问Linux机器时的用户名
    private File pemFile; //通过SSH Key认证时,pemFile包含的是SSH Public Key内容
    private String passwd;//通过用户名密码访问Linux机器时的密码
    private Authentication authentication;

    public Env(String hostaddr, Integer port, String username, File pemFile, String passwd, Authentication authentication) {
        this.hostaddr = hostaddr;
        this.port = port;
        this.username = username;
        this.pemFile = pemFile;
        this.passwd = passwd;
        this.authentication = authentication;
    }


    public String getHostaddr() {
        return hostaddr;
    }

    public Integer getPort() {
        return port;
    }

    public String getUsername() {
        return username;
    }

    public File getPemFile() {
        return pemFile;
    }

    public String getPasswd() {
        return passwd;
    }

    public Authentication getAuthentication() {
        return authentication;
    }
}

 

登录Linxu的认证方式

public enum Authentication {
    USER_PASSWORD("user-password"), SSH_KEY("ssh-key");//用户名密码方式,ssh-key方式
    private String name;

    Authentication(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return this.name;
    }
}

 

 

 

 

package com.tom;

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

import java.io.*;

public class CommandExecutor {

    private static final String LINE_SEPARATOR = System.getProperty("line.separator");

    //Env封装了远程机器的访问信息
    //cmd是要执行的shell命令
    public static String exec(Env v, String cmd) throws IOException {
        Connection conn;
        if (v.getPort() != null) {
            conn = new Connection(v.getHostaddr(), v.getPort());
        } else {
            conn = new Connection(v.getHostaddr());
        }

        //使用Key认证
        //PemFile是ssh public key文件
        boolean b = conn.authenticateWithPublicKey(v.getUsername(), v.getPemFile(), v.getPasswd());
        if (!b) {
            throw new IllegalArgumentException();
        }

        Session session = null;//Java进程与Linux建立会话
        BufferedReader br = null;
        try {
            session = conn.openSession();
            session.execCommand(cmd); //执行命令
            InputStream stdIn = session.getStdout();//获得命令执行的标准输出
            InputStream errIn = session.getStderr(); //获得命令执行的标准错误输出
            StringBuilder sb = new StringBuilder("Standard output:").append(LINE_SEPARATOR);
            br = new BufferedReader(new InputStreamReader(stdIn, "UTF-8"));
            String str = null;
            while ((str = br.readLine()) != null) {
                sb.append(str).append(LINE_SEPARATOR);
            }
            br.close();
            br = new BufferedReader(new InputStreamReader(errIn, "UTF-8"));
            sb.append("Error output:").append(LINE_SEPARATOR);
            while ((str = br.readLine()) != null) {
                sb.append(str).append(LINE_SEPARATOR);
            }
            return sb.toString();
        } finally {
            closeReaders(br);
            if (session != null) {
                session.close();
            }
        }
    }

    private static void closeReaders(Reader... readers) {
        if (readers == null) {
            return;
        }
        for (Reader reader : readers) {
            try {
                reader.close();
            } catch (IOException e) {
                //Ignore
            }
        }
    }
}

 

 

 

【Java】Java执行远程机器上Linux命令

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
JDK里面本身就带了很多的监控工具,如JConsole等。我们今天要讲的这款工具visualvm,就是其中的一款
http://blog.csdn.net/xh16319/article/details/17302947 http://www.iteye.com/problems/42186 一
一:window下执行cmd指定 程序例子: /*该方法实现文件自动复制功能。利用系统命令将指定文件名从源
简化一点,原来Linux上java的jar进程启动脚本为: java -jar /usr/ForTest/ForTest.jar $1 & 为了在
前些日子需要在服务器上发布一个分支的版本,供其它人员联调,发布脚本都有现成的,改改SVN路径就可
通过使用远程SHELL执行框架 sshxcute 实现远程登录Linux并执行命令。 sshxcute 项目地址: http://c
Excelsior JET是一款有提前编译技术的Java虚拟机增强工具(非开源)。提前编译器可以将您的类文件和
准备工作: 一、将你的Java项目进行打包,有这种将项目生成Jar包的Eclipse的插件(Build Fat Jar);
安装SSHLibrary 1、在安装SSHLibrary以前,我们需要安装它的支撑库Paramiko 下载地址:http://www.l
今天我们来聊聊Java远程服务的解决方案。Java分布式远程服务的解决方案,近几年在互联网应用越来越
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号