java远程执行linux命令_Java实现远程连接Linux并执行命令

需要的jar包

ch.ethz.ganymed

ganymed-ssh2

${ganymed-ssh2}

commons-io

commons-io

${commons-io}

jar

compile

commons-lang

commons-lang

${commons-lang}

jar

compile

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并执行命令

本文链接:https://www.kyjszj.com/htzq/207.html

作者授权:除特别说明外,本文由 开源技术之家 原创编译并授权 开源技术之家 刊载发布。

版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值