ganymed-ssh2使用
通过maven库获取ganymed-ssh2-262.jar,这是一个实现了ssh2协议的工具包,可以远程连接linux机器,执行命令,有些工作全靠它了
示例代码如下:
- <!--首先要建立连接,传入ip(默认端口22),登录用户名和密码-->
private static Connection getConnection(String hostname, String username, String password) throws Exception {- Connection conn = null;
- try {
- conn = new Connection(hostname);
- conn.connect();
- boolean isAuthenticated = conn.authenticateWithPassword(username, password);
- if (isAuthenticated == false) {
- throw new IOException("Authentication failed.");
- }
- } catch (Exception e) {
- throw new IOException("username or password error.");
- }
- return conn;
- }
- <!--执行一条命令,传入connect相关参数,命令和超时时间-->
public static String execRemoteCommand(String hostname, String username, String password, String command, long timeout)- throws Exception {
- Connection conn = getConnection(hostname, username, password);
- StringBuilder sb = new StringBuilder();
- Session session = null;
- try {
- session = conn.openSession();
- session.requestPTY("vt100", 80, 24, 640, 480, null);
- session.execCommand(command);
- InputStream stdout = new StreamGobbler(session.getStdout());
- BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
- long start = System.currentTimeMillis();
- char[] arr = new char[512];
- int read;
- int i = 0;
- while (true) {
- read = br.read(arr, 0, arr.length);
- if (read < 0 || (System.currentTimeMillis() - start) > timeout * 1000) {
- break;
- }
- sb.append(new String(arr, 0, read));
- i++;
- }
- } finally {
- if (session != null) {
- session.close();
- }
- if (conn != null) {
- conn.close();
- }
- }
- return sb.toString();
- }
- <!--执行多条命令,传入connect相关参数,命令和超时时间-->
public static String execRemoteCommand(String hostname, String username, String password, String[] command, long timeout)- throws Exception {
- Connection conn = getConnection(hostname, username, password);
- StringBuilder sb = new StringBuilder();
- Session session = null;
- try {
- for (int t = 0; t < command.length; t++) {
- session = conn.openSession();
- session.requestPTY("vt100", 80, 24, 640, 480, null);
- session.execCommand(command[t]);
- InputStream stdout = new StreamGobbler(session.getStdout());
- BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
- long start = System.currentTimeMillis();
- char[] arr = new char[512];
- int read;
- int i = 0;
- while (true) {
- read = br.read(arr, 0, arr.length);
- if (read < 0 || (System.currentTimeMillis() - start) > timeout * 1000) {
- break;
- }
- sb.append(new String(arr, 0, read));
- i++;
- }
- session.close();
- }
- } finally {
- if (conn != null) {
- conn.close();
- }
- }
- return sb.toString();
- }
最近用这个工具包做了个远程下载的功能
- OutputStream out = response.getOutputStream();
- Connection conn = getConnection(sshcfg.getHost(), sshcfg.getUsername(), sshcfg.getPassword());
- SCPInputStream ins=null;
- try {
- SCPClient scpClient = conn.createSCPClient();
- ins = scpClient.get(fpath);
- //InputStream stdout = new StreamGobbler(ins);
- byte[] arr = new byte[512];
- int read;
- while (true) {
- read = ins.read(arr);
- if (read < 0) break;
- out.write(arr);
- }
- //ins.close();
- } finally {
- if(ins!=null)ins.close();
- if (conn != null) {
- conn.close();
- }
- }
注意:new InputStreamReader(stdout)这个的使用的是默认的字符编码,如果执行”cat **.log“而文件中有中文,应当指定编码,比如:new InputStreamReader(stdout,"GBK"),否则有可能出现乱码
ganymed-ssh2使用的更多相关文章
- Ganymed SSH-2 for Java
Ganymed SSH-2 for Java是一个纯Java实现的SHH2库,官网为http://www.ganymed.ethz.ch/ssh2/,最新的更新时间为2006年10月,在用之前,请仔细 ...
- Ganymed实现基本的自动化部署API
Ganymed SSH-2 for Java是一个纯Java实现的SHH2库,官网为http://www.ganymed.ethz.ch/ssh2/,最新的更新时间为2006年10月,在用之前,请仔细 ...
- Java ssh 访问windows/Linux
Java ssh 访问windows/Linux 工作中遇到的问题: Java code运行在一台机器上,需要远程到linux的机器同时执行多种命令.原来采用的方法是直接调用ssh命令或者调用pli ...
- java连接远程服务器之manyged-ssh2 (windows和linux)
一.所需要的jar包 需要借助Ganymed SSH的jar包: ganymed-ssh2-262.jar 下载地址: http://www.ganymed.ethz.ch/ssh2/ API详情: ...
- java linux ssh jar
Ganymed SSH-2 for Java http://www.ganymed.ethz.ch/ssh2/ Ganymed SSH-2 for Java is a library which im ...
- java 调用shell命令
原文:http://kongcodecenter.iteye.com/blog/1231177 Java通过SSH2协议执行远程Shell脚本(ganymed-ssh2-build210.jar) ...
- java程序远程连接Linux服务器
JSCH或 Ganymed Ganymed: Ganymed SSH-2 for Java是用纯Java实现SSH-2协议的一个包. 可以利用它直接在Java程序中连接SSH服务器.官网地址为 htt ...
- 使用ganymed工具调用ssh2
需要引入ganymed-ssh2-build210.jar包. 其实很简单.所以直接贴代码,代码说话. package com.eshore.framework.util; import java.i ...
- ch.ethz.ssh2.Session和com.jcraft.jsch.Session
通过Jsch连接step 1引入jar包<!-- jcraft包 --> <dependency> <groupId>com.j ...
- Java SSH远程执行Shell命令、shell脚本实现(Ganymed SSH)
jar包下载地址: http://www.ganymed.ethz.ch/ssh2/ 此源码的好处就是没有依赖很多其他的包,拷贝过来干干净净.具体代码实现可以看下文,或参考官方文档,在下载的压缩包里g ...
随机推荐
- LinkButton(按钮)
使用$.fn.linkbutton.defaults重写默认值对象. 按钮组件使用超链接按钮创建.它使用一个普通的<a>标签进行展示.它可以同时显示一个图标和文本,或只有图标或文字.按钮的 ...
- 【转】手把手教你利用Jenkins持续集成iOS项目
前言 众所周知,现在App的竞争已经到了用户体验为王,质量为上的白热化阶段.用户们都是很挑剔的.如果一个公司的推广团队好不容易砸了重金推广了一个APP,好不容易有了一些用户,由于一次线上的bug导致一 ...
- Quality Center11初始化失败
打开start_a.jsp页面总是闪退,原因如下: 初始化失败因为证书签名过期了.把IE选项里证书检查的三项勾掉就好了(检查发行商的证书是否吊销.检查服务器证书吊销.检查已下载的程序的签名)
- Linux的运行级别和chkconfig用法
Linux的运行级别和chkconfig用法 一.Linux的运行级别 在装MySQL的时候,才知道了Linux的运行级别这么一回事.汗…自己太水了…下面总结一下: 什么是运行级别呢?简 ...
- windbg命令分类与概述
WinDBG的大多数功能是以命令方式工作的, 本系列将介绍WinDBG的三类命令, 标准命令, 元命令和扩展命令. =============== 标准命令 =============== 标准命令用 ...
- memcached构建集群分析之一
memcached本身是不支持集群的,集群所关注的容灾.容错.宕机恢复机制统统都没有,实战中需要自己实现容灾机制. memcached集群相比memcached的优势: 巨量数据分布到集群的多台应用主 ...
- 在Oracle数据库启动时提示没有权限 ora-01031:insufficient privileges
环境:Linux 操作语句: [oracle@ora11r2 ~]$ sqlplus /nolog SQL*Plus: Release 11.1.0.6.0 - Production on Thu J ...
- IT职场生存法则
转!!!!!!!!!!!!! 摘要我在IT职场打滚超过15年了,从小小的程序员做到常务副总.相对于其它行业,IT职场应该算比较光明的了,但也陷阱重重,本文说说我的亲身体会,希望大家能在IT职场上战无不 ...
- cocos2d-x 获取系统时间
转自:http://blog.csdn.net/jinjian2009/article/details/9449585 之前使用过cocos2d-x获取系统时间,毫秒级的 long getCurren ...
- copy and Xcopy 复制文件到另一地址
1. copy不能复制文件夹下的文件,而Xcopy可以. 2. Xcopy不能连接文件,而copy可以连接文件 eg : 将A盘中的A.TXT和B.TXT文件连接起来,连接后的文件名为C.TXT ...