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. python用zipfile模块打包文件或是目录、解压zip文件实例

    #!/usr/bin/env python # -*- coding: utf-8 -*- from zipfile import * import zipfile #解压zip文件 def unzi ...

  2. linux下保护视力、定时强制锁定软件: Workrave

    超负荷地工作会累坏身体的,而且效率也不高,所以工作一段时间就应该休息一下.长时间在电脑前一动不动,很容易患上“重复性劳损”,即 Repetitive Strain Injury (RSI).具体现象大 ...

  3. 基于jQuery果冻式按钮焦点图切换代码

    基于jQuery果冻式按钮焦点图切换代码.这是一款基于jQuery+CSS3实现的图片切换代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class=&quo ...

  4. wcf中的Message类

    客户端->服务端—>客户端 客户端代码: using (new OperationContextScope(client.InnerChannel))            {       ...

  5. Android动画知识汇总

    Interpolator(插值器) Interpolatort通常在动画中使用,主要来改变动画变化率.常用的有下面几种Interpolator,下面图文解说下: AccelerateDecelerat ...

  6. cacti安装

    cacti是一套基于PHP,MySQL,Net-SNMP及RRDTool开发的网络流量监测图形分析工具.它通snmpget来获取数据,使用RRDtool绘画图形,提供了非常强大的数据和用户管理功能,同 ...

  7. ubuntu 14.04 gitlab 的搭建

    经过两天的尝试,gitlab 终于在 ubuntu14.04 上面搭建起来. 一.安装相关软件. // 执行如下命令: sudo apt-get install vim git curl openss ...

  8. CPP_template

    泛型编程是独立于任何特定类型的方式编写代码.模板是泛型编程的基础,模板使程序员能够快速建立具有类型安全的类库集合和函数集合,它的实现,方便了大规模的软件开发. 模板提供通用类型和通用函数,定义中包含t ...

  9. Entity Framework 动态构造Lambda表达式Expression<Func<T, bool>>

    using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; us ...

  10. 解决:According to TLD or attribute directive in tag file, attribute value does not accept any express。

    http://blog.csdn.net/lzblog/article/details/22076893 ——————————————————————————————————————————————— ...