- N +

Java实现远程连接Linux并执行命令

Java实现远程连接Linux并执行命令原标题:Java实现远程连接Linux并执行命令

导读:

需要的jar包<dependency>        <groupId>ch.ethz.ganymed</...

文章目录 [+]

需要的jar


<dependency>

        <groupId>ch.ethz.ganymed</groupId>

        <artifactId>ganymed-ssh2</artifactId>

        <version>${ganymed-ssh2}</version>

    </dependency>

     <dependency>  

        <groupId>commons-io</groupId>  

        <artifactId>commons-io</artifactId>  

        <version>${commons-io}</version>  

        <type>jar</type>  

        <scope>compile</scope>  

    </dependency>  

    <dependency>  

        <groupId>commons-lang</groupId>  

        <artifactId>commons-lang</artifactId>  

        <version>${commons-lang}</version>  

        <type>jar</type>  

        <scope>compile</scope>  

    </dependency>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

连接及执行命令代码


package com.kpatch.utils;


import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.UnsupportedEncodingException;


import org.apache.commons.lang.StringUtils;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;


import ch.ethz.ssh2.Connection;

import ch.ethz.ssh2.Session;

import ch.ethz.ssh2.StreamGobbler;


public class RemoteCommandUtil {


    private static final Logger log = LoggerFactory.getLogger(RemoteCommandUtil.class);

    private static String  DEFAULTCHART="UTF-8"; 


    /** 

     * 登录主机 

     * @return 

     *      登录成功返回true,否则返回false 

     */  

    public static Connection login(String ip,

                            String userName,

                            String userPwd){  


        boolean flg=false;

        Connection conn = null;

        try {  

            conn = new Connection(ip);  

            conn.connect();//连接  

            flg=conn.authenticateWithPassword(userName, userPwd);//认证  

            if(flg){

                log.info("=========登录成功========="+conn);

                return conn;

            }

        } catch (IOException e) {  

            log.error("=========登录失败========="+e.getMessage());

            e.printStackTrace();  

        }  

        return conn;  

    }  


    /** 

     * 远程执行shll脚本或者命令 

     * @param cmd 

     *      即将执行的命令 

     * @return 

     *      命令执行完后返回的结果值 

     */  

    public static String execute(Connection conn,String cmd){  

        String result="";  

        try {  

            if(conn !=null){  

                Session session= conn.openSession();//打开一个会话  

                session.execCommand(cmd);//执行命令  

                result=processStdout(session.getStdout(),DEFAULTCHART);  

                //如果为得到标准输出为空,说明脚本执行出错了  

                if(StringUtils.isBlank(result)){

                    log.info("得到标准输出为空,链接conn:"+conn+",执行的命令:"+cmd);

                    result=processStdout(session.getStderr(),DEFAULTCHART);  

                }else{

                    log.info("执行命令成功,链接conn:"+conn+",执行的命令:"+cmd);

                }  

                conn.close();  

                session.close();  

            }  

        } catch (IOException e) {

            log.info("执行命令失败,链接conn:"+conn+",执行的命令:"+cmd+"  "+e.getMessage());

            e.printStackTrace();  

        }  

        return result;  

    }

    /** 

     * 解析脚本执行返回的结果集 

     * @param in 输入流对象 

     * @param charset 编码 

     * @return 

     *       以纯文本的格式返回 

     */  

     private static String processStdout(InputStream in, String charset){  

         InputStream  stdout = new StreamGobbler(in);  

         StringBuffer buffer = new StringBuffer();;  

         try {  

             BufferedReader br = new BufferedReader(new InputStreamReader(stdout,charset));  

             String line=null;  

             while((line=br.readLine()) != null){  

                 buffer.append(line+"\n");  

             }  

         } catch (UnsupportedEncodingException e) { 

             log.error("解析脚本出错:"+e.getMessage());

             e.printStackTrace();  

         } catch (IOException e) {

             log.error("解析脚本出错:"+e.getMessage());

             e.printStackTrace();  

         }  

         return buffer.toString();  

     }  

}



本文标题:Java实现远程连接Linux并执行命令
本文链接:http://www.kyjszj.com/htzq/207.html
作者授权:除特别说明外,本文由 开源技术之家 原创编译并授权 开源技术之家 刊载发布。
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。

有好的文章希望我们帮助分享和推广,猛戳这里我要投稿

返回列表
上一篇:
下一篇:

发表评论中国互联网举报中心

快捷回复:

    评论列表 (暂无评论,共385人参与)参与讨论

    还没有评论,来说两句吧...