package org.yeshi.utils;
|
|
import ch.ethz.ssh2.Connection;
|
import ch.ethz.ssh2.Session;
|
import ch.ethz.ssh2.StreamGobbler;
|
|
import java.io.*;
|
|
/**
|
* 远程Linux系统命令执行
|
*/
|
public class LinuxRemoteCommandUtil {
|
|
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) {
|
return conn;
|
}
|
} catch (IOException e) {
|
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 (StringUtil.isNullOrEmpty(result)) {
|
result = processStdout(session.getStderr(), DEFAULTCHART);
|
}
|
conn.close();
|
session.close();
|
}
|
} catch (IOException e) {
|
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) {
|
e.printStackTrace();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
return buffer.toString();
|
}
|
|
|
/**
|
*
|
* @param ip
|
* @param userName
|
* @param pwd
|
* @param cmd
|
* @throws Exception
|
*/
|
public static void execute(String ip, String userName, String pwd, String cmd) throws Exception {
|
Connection connection = login(ip, userName, pwd);
|
if (connection == null)
|
throw new Exception("登录失败");
|
execute(connection, cmd);
|
}
|
|
}
|