ssh方式与服务器建立连接
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. Visio Web 形状 - 无法与 Web 服务器建立连接。请稍后重新进行搜索。处理方式
今天在Visio中使用“搜索形状”,发现不管搜什么,结果都是:Visio Web 形状 - 无法与 Web 服务器建立连接.请稍后重新进行搜索 具体解决方案如下:控制面板=>添加或删除程序=&g ...
- sql server 2008启动时:已成功与服务器建立连接,但是在登录过程中发生错误。(provider:命名管道提供程序,error:0-管道的另一端上无任何进程。)(Microsoft SQL Server,错误:233) 然后再连接:错误:18456
问题:sql server 2008启动时:已成功与服务器建立连接,但是在登录过程中发生错误.(provider:命名管道提供程序,error:0-管道的另一端上无任何进程.)(Microsoft S ...
- 【转】SQL Server -- 已成功与服务器建立连接,但是在登录过程中发生错误
SQL Server -- 已成功与服务器建立连接,但是在登录过程中发生错误 最近在VS2013上连接远程数据库时,突然连接不上,在跑MSTest下跑的时候,QTAgent32 crash.换成IIS ...
- Sql server2012连接Sql server 2008时出现的问题:已成功与服务器建立连接,但在登陆过程中发生错误。(provider:SSL Provider,error:0-接收到的消息异常,或格式不正确。)
以前连接是正常的,就这两天连不上了.(没有耐心的直接看末尾解决办法) 错误消息如下: 1.尝试读取或写入受保护的内存.这通常指示其他内存已损坏.(System.Data) 2.已成功与服务器建立连接, ...
- 已成功与服务器建立连接,但是在登录前的握手期间发生错误。 (provider: SSL Provider, error: 0 - 等待的操作过时)
今天忽然间发现远程连接别人数据库会出现 已成功与服务器建立连接,但是在登录前的握手期间发生错误. (provider: SSL Provider, error: 0 - 等待的操作过时) 这种情况 ...
- SQLServer 2012 已成功与服务器建立连接,但是在登录前的握手期间发生错误。 (provider: SSL Provider, error: 0 - 等待的操作过时。
楼主用SQL Server 2012 在连接其他电脑的实例时,一直提示“已成功与服务器建立连接,但是在登录前的握手期间发生错误. (provider: SSL Provider, error: 0 - ...
- 已成功与服务器建立连接,但是在登录过程中发生错误。 (provider: SSL Provider, error: 0 - 接收到的消息异常,或格式不正确。)
之前做好的asp.net部署后,发现 访问数据库时: 异常:已捕获: "已成功与服务器建立连接,但是在登录过程中发生错误. (provider: SSL Provider, error: 0 ...
- vs 或 Sql server2012连接Sql server时出现的问题:已成功与服务器建立连接,但在登陆过程中发生错误
以前连接是正常的,就这两天连不上了.(没有耐心的直接看末尾解决办法) 错误消息如下: 1.尝试读取或写入受保护的内存.这通常指示其他内存已损坏.(System.Data) 2.已成功与服务器建立连接, ...
- SQL Server(解决问题)已成功与服务器建立连接,但是在登录过程中发生错误。(provider: Shared Memory Provider, error:0 - 管道的另一端上无任何进程。
http://blog.csdn.net/github_35160620/article/details/52676416 如果你在使用新创建的 SQL Server 用户名和密码 对数据库进行连接的 ...
随机推荐
- stdafx
Standard Application Fram Extend没有函数库,只是定义了一些环境参数,使得编译出来的程序能在32位的操作系统环境下运行. Windows和MFC的include文件都非常 ...
- [转]Ext.grid常用属性和方法
原文地址:http://blog.csdn.net/fm19901229/article/details/8113969 1.Ext.grid.GridPanel 主要配置项: store:表格的 ...
- 【转】oracle中的游标的原理和使用详解
游标 游标的简介: 逐行处理查询结果,以编程的方式访问数据 游标的类型: 1,隐式游标:在 PL/SQL 程序中执行DML SQL 语句时自动创建隐式游标,名字固定叫sql. 2,显式游标:显式游标用 ...
- 【转】 oracle 层次查询判断叶子和根节点
Oracle 9i判断是叶子或根节点,是比较麻烦的一件事情,SQL演示脚本如下: DROP TABLE idb_hierarchical; create TABLE idb_hierarchical ...
- Mongo分片集群脚本
bash大法好啊,一键玩mongo. 我的mongo版本是:MongoDB shell version v4.0.2 这里准备为大家献上Mongo创建分片和可复制集的脚本,以及在部署的时候踩的坑. 分 ...
- velocity单引号与双引号
(1)最外层是用单引号包围时,双引号直接使用就可以了,两个连续的单引号表示一个单引号:#set($var2 = 'A"B''C') --> $var2 的值为 A"B'C(2 ...
- Linux里提示cannot find -lsocket解决办法
今天在我的Linux make时提示我找不到 -lsocket,我就去lib库里查了一下,根本没有这个东东,然后在网上看了好多都是说缺少这个库要安装,或是要改libsock.so,试了半天都没有用. ...
- C#中[] 、List、Array、ArrayList等数据结构的差异简述
[] 是针对特定类型.固定长度的. List 是针对特定类型.任意长度的. Array 是针对任意类型.固定长度的. ArrayList 是针对任意类型.任意长度的. Array 和 ArrayLis ...
- linux 安装 vsftpd服务
yum install vsftpd 修改配置文件 vim /etc/vsftpd/ftpusers vim /etc/vsftpd/user_list 简单起见,注释掉两个配置文件中的所有用户.
- Spring Boot Gradle 打包可执行Jar文件!
使用Gradle构建项目,继承了Ant的灵活和Maven的生命周期管理,不再使用XML作为配置文件格式,采用了DSL格式,使得脚本更加简洁. 构建环境: jdk1.6以上,此处使用1.8 Gradle ...