package cn.me.fdfs.util;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
import cn.me.fdfs.vo.Machine;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
/**
* Created with IntelliJ IDEA.
* User: devuser
* Date: 12-8-23
* Time: 下午3:51
* To change this template use File | Settings | File Templates.
*/
public class Tools {
private static final Logger logger = LoggerFactory.getLogger(Tools.class);
public static List<Machine> machines;
public static List<String> exeRemoteConsole(String hostname, String username, String password, String cmd) {
List<String> result = new ArrayList<String>();
//指明连接主机的IP地址
Connection conn = new Connection(hostname);
Session ssh = null;
try {
//连接到主机
conn.connect();
//使用用户名和密码校验
boolean isconn = conn.authenticateWithPassword(username, password);
if (!isconn) {
logger.error("用户名称或者是密码不正确");
} else {
logger.info("已经连接OK");
ssh = conn.openSession();
//使用多个命令用分号隔开
// ssh.execCommand("pwd;cd /tmp;mkdir shb;ls;ps -ef|grep weblogic");
ssh.execCommand(cmd);
//只允许使用一行命令,即ssh对象只能使用一次execCommand这个方法,多次使用则会出现异常
// ssh.execCommand("mkdir hb");
//将屏幕上的文字全部打印出来
InputStream is = new StreamGobbler(ssh.getStdout());
BufferedReader brs = new BufferedReader(new InputStreamReader(is));
for (String line = brs.readLine(); line != null; line = brs.readLine()) {
result.add(line);
}
}
//连接的Session和Connection对象都需要关闭
if (ssh != null) {
ssh.close();
}
conn.close();
} catch (IOException e) {
logger.error("", e);
}
return result;
}
public static String getRootPath() {
String classPath = Tools.class.getClassLoader().getResource("/").getPath();
String rootPath = "";
//windows下
if("\\".equals(File.separator)){
rootPath = classPath.substring(1,classPath.indexOf("/WEB-INF/classes"));
rootPath = rootPath.replace("/", "\\");
}
//linux下
if("/".equals(File.separator)){
rootPath = classPath.substring(0,classPath.indexOf("/WEB-INF/classes"));
rootPath = rootPath.replace("\\", "/");
}
return rootPath;
}
public static String getClassPath(){
String classPath = Tools.class.getClassLoader().getResource("/").getPath();
//windows下
if("\\".equals(File.separator)){
classPath = classPath.replace("/", "\\");
}
//linux下
if("/".equals(File.separator)){
classPath = classPath.replace("\\", "/");
}
return classPath;
}
static {
SAXReader saxReader = new SAXReader();
try {
System.out.println(Tools.getClassPath());
Document document = saxReader.read(Tools.getClassPath() + "config.xml");
Element root = document.getRootElement();
machines = new ArrayList<Machine>();
@SuppressWarnings("unchecked")
List<Element> elements = root.elements("server");
for (Element element : elements) {
Machine machine = new Machine();
String ip = element.element("ip").getText();
String username = element.element("username").getText();
if(element.element("password")!=null){
String password = element.element("password").getText();
machine.setPassword(password);
machine.setConfigType(true); //用户名密码登录
}
if(element.element("ssh")!=null){
String ssh = element.element("ssh").getText();
machine.setSsh(ssh);
machine.setConfigType(false); //密钥登录
int port = Integer.parseInt(element.element("port").getText());
machine.setPort(port);
}
String logpath = element.element("logpath").getText();
machine.setIp(ip);
machine.setUsername(username);
machine.setLogpath(logpath);
machines.add(machine);
}
} catch (DocumentException e) {
logger.error("read config.xml error!!!!", e);
}
}
}