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 <=){
//连接服务器,采用默认端口
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();
try {
//创建sftp通信通道
channel = (Channel) session.openChannel("shell");
channel.connect();
//获取输入流和输出流
InputStream instream = channel.getInputStream();
OutputStream outstream = channel.getOutputStream(); //发送需要执行的SHELL命令,需要用\n结尾,表示回车
shellCommand = shellCommand+" \n";
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=;
//String shellCommand = "ps -ef|grep 1080 | grep -v grep | awk '{print $10}' \n";
//String shellCommand ="./$BASE_HOME/scanprocess.sh \n";
//String processKey="1080net";
String shellCommand="./$BASE_HOME/restartprocess.sh";
//String shellCommand ="ps -ef|grep java|grep -v grep \n";
/*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 = ; 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();
}
} }

ssh方式与服务器建立连接的更多相关文章

  1. 1. Visio Web 形状 - 无法与 Web 服务器建立连接。请稍后重新进行搜索。处理方式

    今天在Visio中使用“搜索形状”,发现不管搜什么,结果都是:Visio Web 形状 - 无法与 Web 服务器建立连接.请稍后重新进行搜索 具体解决方案如下:控制面板=>添加或删除程序=&g ...

  2. sql server 2008启动时:已成功与服务器建立连接,但是在登录过程中发生错误。(provider:命名管道提供程序,error:0-管道的另一端上无任何进程。)(Microsoft SQL Server,错误:233) 然后再连接:错误:18456

    问题:sql server 2008启动时:已成功与服务器建立连接,但是在登录过程中发生错误.(provider:命名管道提供程序,error:0-管道的另一端上无任何进程.)(Microsoft S ...

  3. 【转】SQL Server -- 已成功与服务器建立连接,但是在登录过程中发生错误

    SQL Server -- 已成功与服务器建立连接,但是在登录过程中发生错误 最近在VS2013上连接远程数据库时,突然连接不上,在跑MSTest下跑的时候,QTAgent32 crash.换成IIS ...

  4. Sql server2012连接Sql server 2008时出现的问题:已成功与服务器建立连接,但在登陆过程中发生错误。(provider:SSL Provider,error:0-接收到的消息异常,或格式不正确。)

    以前连接是正常的,就这两天连不上了.(没有耐心的直接看末尾解决办法) 错误消息如下: 1.尝试读取或写入受保护的内存.这通常指示其他内存已损坏.(System.Data) 2.已成功与服务器建立连接, ...

  5. 已成功与服务器建立连接,但是在登录前的握手期间发生错误。 (provider: SSL Provider, error: 0 - 等待的操作过时)

    今天忽然间发现远程连接别人数据库会出现  已成功与服务器建立连接,但是在登录前的握手期间发生错误. (provider: SSL Provider, error: 0 - 等待的操作过时)  这种情况 ...

  6. SQLServer 2012 已成功与服务器建立连接,但是在登录前的握手期间发生错误。 (provider: SSL Provider, error: 0 - 等待的操作过时。

    楼主用SQL Server 2012 在连接其他电脑的实例时,一直提示“已成功与服务器建立连接,但是在登录前的握手期间发生错误. (provider: SSL Provider, error: 0 - ...

  7. 已成功与服务器建立连接,但是在登录过程中发生错误。 (provider: SSL Provider, error: 0 - 接收到的消息异常,或格式不正确。)

    之前做好的asp.net部署后,发现 访问数据库时: 异常:已捕获: "已成功与服务器建立连接,但是在登录过程中发生错误. (provider: SSL Provider, error: 0 ...

  8. vs 或 Sql server2012连接Sql server时出现的问题:已成功与服务器建立连接,但在登陆过程中发生错误

    以前连接是正常的,就这两天连不上了.(没有耐心的直接看末尾解决办法) 错误消息如下: 1.尝试读取或写入受保护的内存.这通常指示其他内存已损坏.(System.Data) 2.已成功与服务器建立连接, ...

  9. SQL Server(解决问题)已成功与服务器建立连接,但是在登录过程中发生错误。(provider: Shared Memory Provider, error:0 - 管道的另一端上无任何进程。

    http://blog.csdn.net/github_35160620/article/details/52676416 如果你在使用新创建的 SQL Server 用户名和密码 对数据库进行连接的 ...

随机推荐

  1. linux中chmod与chown两个命令详解

    在linux系统中chmod,chown命令都可以来设置权限了,但它们也是有区别的,下文小编为各位介绍chmod与chown两个命令用法与区别介绍. 今天要分享的2个命令也是我们平时常用的,chmod ...

  2. Python实例获取mp3文件的tag信息

    下面利用一个python的实例程序,来学习python.这个程序的目的就是分析出所有MP3文件的Tag信息并输出. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

  3. 机器学习集成算法--- 朴素贝叶斯,k-近邻算法,决策树,支持向量机(SVM),Logistic回归

    朴素贝叶斯: 是使用概率论来分类的算法.其中朴素:各特征条件独立:贝叶斯:根据贝叶斯定理.这里,只要分别估计出,特征 Χi 在每一类的条件概率就可以了.类别 y 的先验概率可以通过训练集算出 k-近邻 ...

  4. docker探索-docker安装运行tomcat(六)

    前言      本地已经搭建好了,tomcat容器,本来想自己写一篇,在开源中国一篇不错的教程,就转载过来了 本文转自:https://my.oschina.net/sunchp/blog/61652 ...

  5. 学习MongoDB(二) Replica Set集群配置

    1.官方网址:https://docs.mongodb.org/manual/tutorial/deploy-replica-set-for-testing/ 2.Replica Set介绍: htt ...

  6. Nginx优化(十七)

    [教程主题]:Nginx优化 [课程录制]: 创E [主要内容] Nginx 优化 nginx介绍 Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是 ...

  7. jQuery(三):样式操作

    一.DOM操作分类 DOM Core:任何一种支持DOM的编程语言都可以使用它,例如:getElementById(). HTML-DOM:用于处理HTML文档,例如:document.forms. ...

  8. Javascript Notes

    Get started with Programming Javascript中的保留字,但是大部分却没在这个语言中使用.undefined,NaN,Infinity也应该算保留字. abstract ...

  9. css布局你该了解的

    记录一下: static :默认值:默认布局. fixed :固定定位:类似于absolute,但不随着滚动条的移动而改变位置. float: 给元素的float属性赋值后,就是脱离文档流,进行左右浮 ...

  10. MapReduce 图解流程超详细解答(1)-【map阶段】

    转自:http://www.open-open.com/lib/view/open1453097241308.html 在MapReduce中,一个YARN  应用被称作一个job, MapReduc ...