package com.ustcinfo.cinas.pmng.util; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.jcraft.jsch.Channel; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; /** *************************************************************** * <p> * @ProjectName : CINASProcessManager * @CLASS : SocketConnectUtil * @AUTHOR : aa * @DESCRIPTION : ssh方式与服务器建立连接 * @VERSION : v1.0 * @DATE : 2014-5-20 上午9:49:01 * <p> **************************************************************** */ public class SSHConnectUtil { private static final Logger logger =LoggerFactory.getLogger(SSHConnectUtil.class); private static final SSHConnectUtil instance = new SSHConnectUtil(); public SSHConnectUtil() { } public static SSHConnectUtil getInstance() { return instance; } /** * @description * @description * @author wangkun * @param ip * @param user * @param psw * @param port * @param shellCommand * @param matcherKey * @return * @throws Exception */ public String sshShell(String ip, String user, String psw ,int port , String shellCommand) throws Exception{ Session session = null; Channel channel = null; String result=null; JSch jsch = new JSch(); if(port <=0){ //连接服务器,采用默认端口 session = jsch.getSession(user, ip); }else{ //采用指定的端口连接服务器 session = jsch.getSession(user, ip ,port); } //如果服务器连接不上,则抛出异常 if (session == null) { throw new Exception("session is null"); } //设置登陆主机的密码 session.setPassword(psw);//设置密码 //设置第一次登陆的时候提示,可选值:(ask | yes | no) session.setConfig("StrictHostKeyChecking", "no"); //设置登陆超时时间 session.connect(30000); try { //创建sftp通信通道 channel = (Channel) session.openChannel("shell"); channel.connect(1000); //获取输入流和输出流 InputStream instream = channel.getInputStream(); OutputStream outstream = channel.getOutputStream(); //发送需要执行的SHELL命令,需要用 结尾,表示回车 shellCommand = shellCommand+" "; outstream.write(shellCommand.getBytes()); outstream.flush(); //获取命令执行的结果 result =readStream(instream); outstream.close(); instream.close(); } catch (Exception e) { e.printStackTrace(); } finally { session.disconnect(); channel.disconnect(); } return result; } /** * @description 读取流 * @author wangkun * @param inStream * @return * @throws Exception */ public static String readStream(InputStream inStream) throws Exception { InputStreamReader InputStreamReader = new InputStreamReader(inStream); BufferedReader reader=new BufferedReader(InputStreamReader); String s = null; StringBuffer bf = new StringBuffer(); while((s = reader.readLine())!=null){ bf.append(s); if(s.equals("goodbye")){ break; } } return bf.toString(); } public static void main(String[] args) { String ip ="192.168.80.211"; String user ="cinas"; String psw="inas2013"; int port=22; //String shellCommand = "ps -ef|grep 1080 | grep -v grep | awk '{print $10}' "; //String shellCommand ="./$BASE_HOME/scanprocess.sh "; //String processKey="1080net"; String shellCommand="./$BASE_HOME/restartprocess.sh"; //String shellCommand ="ps -ef|grep java|grep -v grep "; /*if(!shellCommand.contains("awk '{print")){ System.out.println("请输入正确的指令"); return ; }*/ String matcherKey="1080net_4GCS"; try { SSHConnectUtil sSHConnectUtil = new SSHConnectUtil(); //String result = sSHConnectUtil.sshShell(ip, user, psw, port, shellCommand); //System.out.println("result :"+result); String[] processKey =matcherKey.split("_"); for (int i = 0; i < processKey.length; i++) { System.out.println("**************"+processKey[i]); String command =shellCommand+" "+processKey[i].toString(); System.out.println("执行命令是:"+shellCommand); String result = sSHConnectUtil.sshShell(ip, user, psw, port, command); System.out.println("==========>命令执行结果是:"+result); logger.info("==========>命令执行结果是:"+result); command=shellCommand; } /*//StringTokenizer st = new StringTokenizer(matcherKey,"_"); List listRuning = new ArrayList(); List listStop = new ArrayList(); String[] processKey =matcherKey.split("_"); for (int i = 0; i < processKey.length; i++) { System.out.println(processKey[i]); if(result.contains(processKey[i])){ listRuning.add(processKey[i]); }else{ listStop.add(processKey[i]); } } System.out.println("运行的进程个数:"+listRuning.size()); System.out.println("停止的进程个数:"+listStop.size());*/ /*List list = new ArrayList(); while (st.hasMoreTokens()) { System.out.println("AAAAAAAAA:"+st.nextToken()); if(result.contains(st.nextToken())){ list.add(st.nextToken()); } } System.out.println("队列长度:"+list.size());*/ } catch (Exception e) { e.printStackTrace(); } } }