通过maven库获取ganymed-ssh2-262.jar,这是一个实现了ssh2协议的工具包,可以远程连接linux机器,执行命令,有些工作全靠它了

示例代码如下:

  1. <!--首先要建立连接,传入ip(默认端口22),登录用户名和密码-->
    private static Connection getConnection(String hostname, String username, String password) throws Exception {
  2. Connection conn = null;
  3. try {
  4. conn = new Connection(hostname);
  5. conn.connect();
  6. boolean isAuthenticated = conn.authenticateWithPassword(username, password);
  7. if (isAuthenticated == false) {
  8. throw new IOException("Authentication failed.");
  9. }
  10. } catch (Exception e) {
  11. throw new IOException("username or password error.");
  12. }
  13. return conn;
  14. }
  1. <!--执行一条命令,传入connect相关参数,命令和超时时间-->
    public static String execRemoteCommand(String hostname, String username, String password, String command, long timeout)
  2. throws Exception {
  3. Connection conn = getConnection(hostname, username, password);
  4. StringBuilder sb = new StringBuilder();
  5. Session session = null;
  6. try {
  7. session = conn.openSession();
  8. session.requestPTY("vt100", 80, 24, 640, 480, null);
  9. session.execCommand(command);
  10. InputStream stdout = new StreamGobbler(session.getStdout());
  11. BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
  12. long start = System.currentTimeMillis();
  13. char[] arr = new char[512];
  14. int read;
  15. int i = 0;
  16. while (true) {
  17. read = br.read(arr, 0, arr.length);
  18. if (read < 0 || (System.currentTimeMillis() - start) > timeout * 1000) {
  19. break;
  20. }
  21. sb.append(new String(arr, 0, read));
  22. i++;
  23. }
  24. } finally {
  25. if (session != null) {
  26. session.close();
  27. }
  28. if (conn != null) {
  29. conn.close();
  30. }
  31. }
  32. return sb.toString();
  33. }
  1. <!--执行多条命令,传入connect相关参数,命令和超时时间-->
    public static String execRemoteCommand(String hostname, String username, String password, String[] command, long timeout)
  2. throws Exception {
  3. Connection conn = getConnection(hostname, username, password);
  4. StringBuilder sb = new StringBuilder();
  5. Session session = null;
  6. try {
  7. for (int t = 0; t < command.length; t++) {
  8. session = conn.openSession();
  9. session.requestPTY("vt100", 80, 24, 640, 480, null);
  10. session.execCommand(command[t]);
  11. InputStream stdout = new StreamGobbler(session.getStdout());
  12. BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
  13. long start = System.currentTimeMillis();
  14. char[] arr = new char[512];
  15. int read;
  16. int i = 0;
  17. while (true) {
  18. read = br.read(arr, 0, arr.length);
  19. if (read < 0 || (System.currentTimeMillis() - start) > timeout * 1000) {
  20. break;
  21. }
  22. sb.append(new String(arr, 0, read));
  23. i++;
  24. }
  25. session.close();
  26. }
  27. } finally {
  28. if (conn != null) {
  29. conn.close();
  30. }
  31. }
  32. return sb.toString();
  33. }

最近用这个工具包做了个远程下载的功能

  1. OutputStream out = response.getOutputStream();
  2. Connection conn = getConnection(sshcfg.getHost(), sshcfg.getUsername(), sshcfg.getPassword());
  3. SCPInputStream ins=null;
  4. try {
  5.   SCPClient scpClient = conn.createSCPClient();
  6.   ins = scpClient.get(fpath);
  7.   //InputStream stdout = new StreamGobbler(ins);
  8.   byte[] arr = new byte[512];
  9.   int read;
  10.   while (true) {
  11.     read = ins.read(arr);
  12.     if (read < 0) break;
  13.     out.write(arr);
  14. }
  15. //ins.close();
  16.  
  17. } finally {
  18.   if(ins!=null)ins.close();
  19.   if (conn != null) {
  20.   conn.close();
  21.   }
  22. }

注意:new InputStreamReader(stdout)这个的使用的是默认的字符编码,如果执行”cat **.log“而文件中有中文,应当指定编码,比如:new InputStreamReader(stdout,"GBK"),否则有可能出现乱码

ganymed-ssh2使用的更多相关文章

  1. Ganymed SSH-2 for Java

    Ganymed SSH-2 for Java是一个纯Java实现的SHH2库,官网为http://www.ganymed.ethz.ch/ssh2/,最新的更新时间为2006年10月,在用之前,请仔细 ...

  2. Ganymed实现基本的自动化部署API

    Ganymed SSH-2 for Java是一个纯Java实现的SHH2库,官网为http://www.ganymed.ethz.ch/ssh2/,最新的更新时间为2006年10月,在用之前,请仔细 ...

  3. Java ssh 访问windows/Linux

     Java ssh 访问windows/Linux 工作中遇到的问题: Java code运行在一台机器上,需要远程到linux的机器同时执行多种命令.原来采用的方法是直接调用ssh命令或者调用pli ...

  4. java连接远程服务器之manyged-ssh2 (windows和linux)

    一.所需要的jar包 需要借助Ganymed SSH的jar包:  ganymed-ssh2-262.jar 下载地址: http://www.ganymed.ethz.ch/ssh2/ API详情: ...

  5. 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 ...

  6. java 调用shell命令

    原文:http://kongcodecenter.iteye.com/blog/1231177 Java通过SSH2协议执行远程Shell脚本(ganymed-ssh2-build210.jar)   ...

  7. java程序远程连接Linux服务器

    JSCH或 Ganymed Ganymed: Ganymed SSH-2 for Java是用纯Java实现SSH-2协议的一个包. 可以利用它直接在Java程序中连接SSH服务器.官网地址为 htt ...

  8. 使用ganymed工具调用ssh2

    需要引入ganymed-ssh2-build210.jar包. 其实很简单.所以直接贴代码,代码说话. package com.eshore.framework.util; import java.i ...

  9. ch.ethz.ssh2.Session和com.jcraft.jsch.Session

    通过Jsch连接step 1引入jar包<!-- jcraft包 -->        <dependency>            <groupId>com.j ...

  10. Java SSH远程执行Shell命令、shell脚本实现(Ganymed SSH)

    jar包下载地址: http://www.ganymed.ethz.ch/ssh2/ 此源码的好处就是没有依赖很多其他的包,拷贝过来干干净净.具体代码实现可以看下文,或参考官方文档,在下载的压缩包里g ...

随机推荐

  1. LinkButton(按钮)

    使用$.fn.linkbutton.defaults重写默认值对象. 按钮组件使用超链接按钮创建.它使用一个普通的<a>标签进行展示.它可以同时显示一个图标和文本,或只有图标或文字.按钮的 ...

  2. 【转】手把手教你利用Jenkins持续集成iOS项目

    前言 众所周知,现在App的竞争已经到了用户体验为王,质量为上的白热化阶段.用户们都是很挑剔的.如果一个公司的推广团队好不容易砸了重金推广了一个APP,好不容易有了一些用户,由于一次线上的bug导致一 ...

  3. Quality Center11初始化失败

    打开start_a.jsp页面总是闪退,原因如下: 初始化失败因为证书签名过期了.把IE选项里证书检查的三项勾掉就好了(检查发行商的证书是否吊销.检查服务器证书吊销.检查已下载的程序的签名)

  4. Linux的运行级别和chkconfig用法

    Linux的运行级别和chkconfig用法        一.Linux的运行级别 在装MySQL的时候,才知道了Linux的运行级别这么一回事.汗…自己太水了…下面总结一下: 什么是运行级别呢?简 ...

  5. windbg命令分类与概述

    WinDBG的大多数功能是以命令方式工作的, 本系列将介绍WinDBG的三类命令, 标准命令, 元命令和扩展命令. =============== 标准命令 =============== 标准命令用 ...

  6. memcached构建集群分析之一

    memcached本身是不支持集群的,集群所关注的容灾.容错.宕机恢复机制统统都没有,实战中需要自己实现容灾机制. memcached集群相比memcached的优势: 巨量数据分布到集群的多台应用主 ...

  7. 在Oracle数据库启动时提示没有权限 ora-01031:insufficient privileges

    环境:Linux 操作语句: [oracle@ora11r2 ~]$ sqlplus /nolog SQL*Plus: Release 11.1.0.6.0 - Production on Thu J ...

  8. IT职场生存法则

    转!!!!!!!!!!!!! 摘要我在IT职场打滚超过15年了,从小小的程序员做到常务副总.相对于其它行业,IT职场应该算比较光明的了,但也陷阱重重,本文说说我的亲身体会,希望大家能在IT职场上战无不 ...

  9. cocos2d-x 获取系统时间

    转自:http://blog.csdn.net/jinjian2009/article/details/9449585 之前使用过cocos2d-x获取系统时间,毫秒级的 long getCurren ...

  10. copy and Xcopy 复制文件到另一地址

    1. copy不能复制文件夹下的文件,而Xcopy可以. 2. Xcopy不能连接文件,而copy可以连接文件 eg : 将A盘中的A.TXT和B.TXT文件连接起来,连接后的文件名为C.TXT    ...