1. import ch.ethz.ssh2.Connection;
    import ch.ethz.ssh2.Session;
    import ch.ethz.ssh2.StreamGobbler;
    import lombok.extern.slf4j.Slf4j;
  2.  
  3. import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
  1. /**
    * 登录ssh
    * @param ip
    * @param username
    * @param password
    * @return
    */
    public static Connection login(String ip, String username, String password) {
    boolean flag = false;
    Connection connection = null;
    try {
    connection = new Connection(ip);
    connection.connect();// 连接
    flag = connection.authenticateWithPassword(username, password);// 认证
    if (flag) {
    System.out.println("================" + ip + " 登录成功==================");
    return connection;
    }
    } catch (Exception e) {
    log.info("=========登录失败=========" + e);
    if (connection != null)
    connection.close();
    connection = null;
    }
    return connection;
    }
  2.  
  3. /**
    * 远程执行shll脚本或者命令
    *
    * @param cmd 即将执行的命令
    * @return 命令执行完后返回的结果值
    */
    public static String execmd(Connection connection, String cmd) {
    String result = "";
    try {
    if (connection != null) {
    Session session = connection.openSession();// 打开一个会话
    session.execCommand(cmd);// 执行命令
    result = processStdout(session.getStdout());
    System.out.println(result);
    // 如果为得到标准输出为空,说明脚本执行出错了
    /* if (!StringUtils.isEmpty(result)) {
    System.out.println("得到标准输出为空,链接conn:" + connection + ",执行的命令:" + cmd);
    result = processStdout(session.getStderr(), DEFAULTCHART);
    } else {
    System.out.println("执行命令成功,链接conn:" + connection + ",执行的命令:" + cmd);
    }*/
    /*connection.close();
    session.close();*/
    }
    } catch (Exception e) {
    log.info("执行命令失败,链接conn:" + connection + ",执行的命令:" + cmd + " " + e);
    // e.printStackTrace();
    }
    return result;
    }
  4.  
  5. /**
    * 解析脚本执行返回的结果集
    *
    * @param in 输入流对象
    * @return 以纯文本的格式返回
    */
    private static String processStdout(InputStream in) {
    InputStream stdout = new StreamGobbler(in);
    StringBuffer buffer = new StringBuffer();
    try {
    BufferedReader br = new BufferedReader(new InputStreamReader(stdout, StandardCharsets.UTF_8));
    String line = null;
    while ((line = br.readLine()) != null) {
    buffer.append(line).append("\n");
    // System.out.println(line);
    }
    br.close();
    } catch (IOException e) {
    log.info("解析脚本出错:" + e.getMessage());
    // e.printStackTrace();
    }
    return buffer.toString();
    }

java实现ssh连接工具类的更多相关文章

  1. 数据库连接工具类——包含取得连接和关闭资源 ConnUtil.java

    package com.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepare ...

  2. 数据库连接工具类 数据库连接工具类——仅仅获得连接对象 ConnDB.java

    package com.util; import java.sql.Connection; import java.sql.DriverManager; /** * 数据库连接工具类——仅仅获得连接对 ...

  3. 第一天:java与mysql的连接工具类

    第一天:java与mysql的连接工具类 java最新版马上就要收费,这无疑是这门语言的衰败起始,毕竟在中国收费便难发展,例如c#,但是毕业设计已经选好用java来写一个动态网站, 这已经是一个事实, ...

  4. android开发网络连接工具类(一)

    网络连接工具类整理: package com.gzcivil.utils; import java.io.IOException; import java.util.ArrayList; import ...

  5. Java通过ssh连接到Linxu和Windos服务器远程启动Tomcat

    一.Linxu服务器远程启动tomcat 1.首先确保linxu服务器上的tomcat jdk等必要软件正确安装,并且可以正常启动. 2.编写Java SSH工具类. 相关jar包: <depe ...

  6. JDBC实例--通过连接工具类DBUtil +配置文件来获取连接数据库,方便又快捷

    根据前面的连接方法,还有缺点就是,如果人家要换数据库,还得改动源代码,然后还要编译什么的.这样客户修改也不容易. 做法:我们写一个配置文件,把该数据写在配置文件上面,然后通过类来加载改文件,然后读取相 ...

  7. Redis连接工具类

    Redis连接工具类 导包 测试一下(junit) package com.test; import org.junit.Test; import redis.clients.jedis.Jedis; ...

  8. 通过使用集合Properties完成JDBC的连接工具类

    1.将数据库连接对象所需参数保存在本地文件中 database.properties driverClass=com.mysql.jdbc.Driver url=jdbc:mysql://localh ...

  9. Java程序日志:java.util.logging.Logger类

    一.Logger 的级别 比log4j的级别详细,全部定义在java.util.logging.Level里面.各级别按降序排列如下:SEVERE(最高值)WARNINGINFOCONFIGFINEF ...

随机推荐

  1. NETPLIER : 一款基于概率的网络协议逆向工具(一)理论

    本文系原创,转载请说明出处:信安科研人 关注微信公众号 信安科研人 获取更多网络安全学术技术资讯 今日介绍一篇发表在2021 NDSS会议上的一项有关协议逆向的工作: @ 目录 1 网络协议逆向工程简 ...

  2. TypeScript方法的定义

    在 JavaScript 中,有两种方式定义方法. 1.命名的方法 function add(x,y){ return x+y;}2.匿名方法 var myAdd = function(x,y) { ...

  3. shellLab实验报告

    一.预备知识 阅读课本CSAPP的第八章后完成本次实验,要求熟练掌握以下内容: 进程的概念.状态以及控制进程的几个函数(fork,waitpid,execve). 信号的概念,会编写正确安全的信号处理 ...

  4. 漫长的旅途--C++primer学习-命名空间以及类的自动转换和强制转换

    C++用名称空间来控制名称的作用域: 1不同命名空间的同名变量可以同时存在,不会发生冲突 2命名空间不能出现在代码块中 3我们用作用域运算符::,使用空间名来限定名称,最常用的std::cout 4u ...

  5. C++ md5 函数

    转 http://www.zedwood.com/article/cpp-md5-function MD5 is no longer considered cryptographically safe ...

  6. 手撕代码:leetcode 309最佳买卖股票时机含冷冻期

    转载于:https://segmentfault.com/a/1190000014746613 给定一个整数数组,其中第i个元素代表了第i天的股票价格. 设计一个算法计算出最大利润.在满足以下约束条件 ...

  7. Java 语言如何进行异常处理,关键字:throws、throw、 try、catch、finally 分别如何使用?

    Java 通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口.在 Java 中,每个异常都是一个对象,它是 Throwable 类或其子类的实例.当一个方法出现异常后便抛出一 ...

  8. WzwJDBC 自定义工具类(获取连接,释放资源)

    package wzwUtil;import java.io.IOException;import java.io.InputStream;import java.sql.*;import java. ...

  9. java中如何获得src路径

    代码 解析: 类名.class.get类加载器().getResourceAsStream("文件名"); 案例代码: Demo.class.getClassLoader().ge ...

  10. 《剑指offer》面试题2:实现Singleton 模式

    面试题2:实现Singleton 模式 题目:设计一个类,我们只能生成该类的一个实例.   只能生成一个实例的类是实现了Singleton (单例)模式的类型.由于设计模式在面向对象程序设计中起着举足 ...