zoukankan      html  css  js  c++  java
  • java实现ssh连接工具类

    import ch.ethz.ssh2.Connection;
    import ch.ethz.ssh2.Session;
    import ch.ethz.ssh2.StreamGobbler;
    import lombok.extern.slf4j.Slf4j;

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    /**
    * 登录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;
    }

    /**
    * 远程执行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;
    }

    /**
    * 解析脚本执行返回的结果集
    *
    * @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(" ");
    // System.out.println(line);
    }
    br.close();
    } catch (IOException e) {
    log.info("解析脚本出错:" + e.getMessage());
    // e.printStackTrace();
    }
    return buffer.toString();
    }
  • 相关阅读:
    网络编程-Python的socket库
    Python -用虚拟环境保存库文件
    Python --文件的读写
    VIM--常用操作
    libpcap -学习1
    Python -装饰器
    C++ 关于map,function的简单应用
    UVAlive 3635 (13.08.23)
    C语言中的整型提升(integral promotion)
    [置顶] 从一位数组中提取最小k个元素
  • 原文地址:https://www.cnblogs.com/coderxiaobai/p/14506624.html
Copyright © 2011-2022 走看看