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. LeetCode: String to Integer (atoi) 解题报告

    String to Integer (atoi) Implement atoi to convert a string to an integer. Hint: Carefully consider ...

  2. Python爬虫技巧

    Python爬虫技巧一之设置ADSL拨号服务器代理 reference: https://zhuanlan.zhihu.com/p/25286144 爬取数据时,是不是只能每个网站每个网站的分析,有没 ...

  3. mysql性能优化(一)

    随着项目的上线,关注开始关注服务器的运维和优化,其中后端数据库状态查看和参数调优是比不可少的一步,可能用到的两个小工具: mysqltuner.pl tuning-primer.sh 参考: [1] ...

  4. [转]启动Tomcat提示:指定的服务未安装

    原文地址:http://blog.csdn.net/yilip/article/details/8066246 新下载的Tomcat7.0 解压缩完了运行tomcat7.exe屏幕一闪就没了 运行to ...

  5. SpringBoot使用AutoConfiguration自定义Starter

    https://segmentfault.com/a/1190000011433487

  6. duubo开发时直连(不需要注册中心)

    前言 在dubbo开发时,一般开发人员不连注册中心,在这里记录下1.consumer端配置 <?xml version="1.0" encoding="UTF-8& ...

  7. 命令行下mysql新建用户及分配权限

    创建用户: CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明:username – 你将创建的用户名, host – 指定该用户在哪 ...

  8. Beans

    PHP之所以被人称为"世界上最好的语言",很大程度上是因为学会语法后就可以直接运用其开发Web应用了吧,而Java基本上不可能.在Java的语言特性的背后,还拖着由Sun公司和社区 ...

  9. ML-DL-各种资源汇总

    1.Used Libraries, Datasets, and Models 1.1 Libraries TensorFlow (from Google): https://www.tensorflo ...

  10. hbase源码系列(十四)Compact和Split

    先上一张图讲一下Compaction和Split的关系,这样会比较直观一些. Compaction把多个MemStore flush出来的StoreFile合并成一个文件,而Split则是把过大的文件 ...