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. 实践2:github管理代码仓库,包含用webpack打包项目

    此篇介绍用github仓库管理代码,github是大型的项目代码管理,存储平台:简单说帮助一个团队共享,修改同一个项目,配合着gitHub Desktop非常方便: 可以做到多人删除.修改.增加同一项 ...

  2. Azure Container App(一)应用介绍

    一,引言 容器技术正日益成为打包.部署应用程序的第一选择.Azure 提供了许多使用容器的选项.例如,我们可以使用 Azure 容器注册表来存储和管理 Docker Images.Azure Cont ...

  3. Oracle在存储过程中建表、建索引权限不足

    修改存储过程,在存储过程名称后面添加 Authid Current_User 后执行通过. CREATE OR REPLACE PROCEDURE p_test Authid Current_User ...

  4. Flask(Jinja2) 服务端模板注入漏洞

    原理 参考文章: https://www.blackhat.com/docs/us-15/materials/us-15-Kettle-Server-Side-Template-Injection-R ...

  5. OSPF的五种报文

    OSPF的五种报文 Hello报文 DD(Database Description)数据库描述报文 LSR(LinkState Request)链路状态请求报文 LSU(LinkState Updat ...

  6. C++_STL_all_of

    all_of 功能描述 如果在[first,last)范围内的数组进行判断, 如果pred返回true返回true 否则返回false 等同于 template<class InputItera ...

  7. 如何获取 topic 主题的列表?

    bin/kafka-topics.sh --list --zookeeper localhost:2181

  8. Oracle入门基础(三)一一单行函数

    SQL> --字符函数 SQL> select lower('Hello World') 转小写,upper('Hello World') 转大写,initcap('hello world ...

  9. MariaDB ZIP方式安装(Window系统)

    Maria DB ZIP方式安装 Windows上ZIP包的入门非常简单-此发行版包括预构建的数据库文件,这些文件可以在解压缩ZIP后立即使用. 您可以从命令提示符运行mysqld.exe,如下所示: ...

  10. 如果有大量的 key 需要设置同一时间过期,一般需要注意什么?

    如果大量的 key 过期时间设置的过于集中,到过期的那个时间点,redis 可能 会出现短暂的卡顿现象.一般需要在时间上加一个随机值,使得过期时间分散一 些.