文档章节

SSH

Pig-man
 Pig-man
发布于 2017/09/12 09:37
字数 383
阅读 13
收藏 0
点赞 1
评论 0

远程执行Linux命令,依赖ganymed-ssh2.jar

public class SSHUtil {
	
	private static final Logger logger = LoggerFactory.getLogger(SSHUtil.class);
	
	public static String execCommand(String host, int port, String username, String password, String command) {
		String result = "";
		Connection conn = null;
		Session ssh = null;
		try {
			//conn
			conn = new Connection(host, port);
			conn.connect();
			logger.info("Connecting to "+host+":"+port+"...");
			boolean authenticated = conn.authenticateWithPassword(username, password);
			if(!authenticated) {
				logger.info("Username or password is wrong");
			} else {
				logger.info("Connected");
				//open session
				ssh = conn.openSession();
				//exec command
				logger.info("Command start");
				logger.info("Command " + command);
				ssh.execCommand(command);
				InputStream  is = new StreamGobbler(ssh.getStdout());
				BufferedReader br = new BufferedReader(new InputStreamReader(is));
				while(true){
					String line = br.readLine();
					if(line==null){
						break;
					}
					result+= new String(line.getBytes("GBK"),"UTF-8")+"\r\n";
				}
				logger.info("Command end");
				br.close();
			}
		} catch (ConnectException e) {
			e.printStackTrace();
			logger.error("Connection refused", e);
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("Exec command error", e);
		} finally {
			if(ssh!=null) {
				ssh.close();
			}
			if(conn!=null) {
				conn.close();
			}
		}
		return result;
	}
	
	public static void main(String[] args) {
		String host = "192.168.3.9";
		int port = 22;
		String username = "root";
		String password = "redhat";
		String command = "uname -s -r -v";
		String result = execCommand(host, port, username, password, command);
		System.out.println("result="+result);
	}

}
---------------------------------------------------------------------------------------------------------

远程执行Linux命令,依赖jsch.jar(JSch=Java Secure Channel)

public class SSHJSchUtil {
	
	private static final Logger logger = LoggerFactory.getLogger(SSHJSchUtil.class);
	
	public static String execCommand(String host, int port, String username,String password, String command) {
		String result = "";
		Session session = null;
		ChannelExec openChannel =null;
		try {
			//Session
			logger.debug("Connecting to "+host+":"+port+"...");
			JSch jsch=new JSch();
			session = jsch.getSession(username, host, port);
			session.setPassword(password);
			session.setTimeout(2000);
			Properties config = new Properties ();
			config.put("StrictHostKeyChecking", "no");
			session.setConfig(config);
			session.connect();
			logger.debug("Connected");
			//Channel
			logger.debug("Command start");
			logger.debug("Command " + command);
			openChannel = (ChannelExec) session.openChannel("exec");
			openChannel.setCommand(command);
			//int exitStatus = openChannel.getExitStatus();
			openChannel.connect();
			InputStream in = openChannel.getInputStream(); 
			BufferedReader br = new BufferedReader(new InputStreamReader(in));
			while(true){
				String line = br.readLine();
				if(line==null){
					break;
				}
				result+= new String(line.getBytes("GBK"),"UTF-8")+"\r\n";
			}
			br.close();
			logger.debug("Command end");
		} catch (JSchException e) {
			e.printStackTrace();
			logger.error("Connection refused", e);
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("Exec command error", e);
		} finally {
			if(openChannel!=null&&!openChannel.isClosed()){
				openChannel.disconnect();
			}
			if(session!=null&&session.isConnected()){
				session.disconnect();
			}
		}
		return result;
	}
	
	public static void main(String[] args) {
		String host = "192.168.3.9";
		int port = 22;
		String username = "root";
		String password = "redhat";
		String command = "uname -s -r -v";
		String result = execCommand(host, port, username, password, command);
		System.out.println("result="+result);
	}

}

 

 

© 著作权归作者所有

共有 人打赏支持
Pig-man
粉丝 19
博文 61
码字总数 46911
作品 0
青浦
程序员

暂无文章

about git flow

  昨天元芳做了git分支管理规范的分享,为了拓展大家关于git分支的认知,这里我特意再分享这两个关于git flow的链接,大家可以看一下。 Git 工作流程 Git分支管理策略   git flow本质上是...

qwfys
今天
1
0
Linux系统日志文件

/var/log/messages linux系统总日志 /etc/logrotate.conf 日志切割配置文件 参考https://my.oschina.net/u/2000675/blog/908189 dmesg命令 dmesg’命令显示linux内核的环形缓冲区信息,我们可...

chencheng-linux
今天
1
0
MacOS下给树莓派安装Raspbian系统

下载镜像 前往 树莓派官网 下载镜像。 点击 最新版Raspbian 下载最新版镜像。 下载后请,通过 访达 双击解压,或通过 unzip 命令解压。 检查下载的文件 ls -lh -rw-r--r-- 1 dingdayu s...

dingdayu
今天
0
0
spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

北岩
今天
2
0
告警系统邮件引擎、运行告警系统

告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

Zhouliang6
今天
0
0
Java工具类—随机数

Java中常用的生成随机数有Math.random()方法及java.util.Random类.但他们生成的随机数都是伪随机的. Math.radom()方法 在jdk1.8的Math类中可以看到,Math.random()方法实际上就是调用Random类...

PrivateO2
今天
2
0
关于java内存模型、并发编程的好文

Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在...

DannyCoder
昨天
0
0
dubbo @Reference retries 重试次数 一个坑

在代码一中设置 成retries=0,也就是调用超时不用重试,结果DEBUG的时候总是重试,不是0吗,0就不用重试啊。为什么还是调用了多次呢? 结果在网上看到 这篇文章才明白 https://www.cnblogs....

奋斗的小牛
昨天
2
0
数据结构与算法3

要抓紧喽~~~~~~~放羊的孩纸回来喽 LowArray类和LowArrayApp类 程序将一个普通的Java数组封装在LowArray类中。类中的数组隐藏了起来,它是私有的,所以只有类自己的方法才能访问他。 LowArray...

沉迷于编程的小菜菜
昨天
0
0
spring boot应用测试框架介绍

一、spring boot应用测试存在的问题 官方提供的测试框架spring-boot-test-starter,虽然提供了很多功能(junit、spring test、assertj、hamcrest、mockito、jsonassert、jsonpath),但是在数...

yangjianzhou
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部