Java操作SSH2实现远程执行linux命令

 更新时间:2025年01月02日 09:35:45   作者:一起喝芬达2010  
这篇文章主要为大家详细介绍了Java如何操作SSH2实现远程执行linux命令,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

引入依赖

<dependency>
    <groupId>ch.ethz.ganymed</groupId>
    <artifactId>ganymed-ssh2</artifactId>
    <version>262</version>
</dependency>

SSH2Util 工具类封装

import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class SSH2Util {

    //指定默认编码
    private static String DEFAULT_CHARSET = "UTF-8";

    /**
     * 建立SSH2连接
     * @param host 主机地址
     * @param username 用户名
     * @param password 密码
     * @return Connection
     */
    public static Connection openConnection(String host,String username,String password) {
        try {
            Connection connection = new Connection(host);
            //建立ssh2连接
            connection.connect();
            //检验用户名
            boolean login = connection.authenticateWithPassword(username,password);
            if (login){
                logger.info(host + " 连接成功");
                return connection;
            }else {
                throw new RuntimeException(host + " 用户名密码不正确");
            }
        } catch (Exception e) {
            throw new RuntimeException(host +" "+ e);
        }
    }

    /**
     * 执行命令
     * @param connection ssh2连接对象
     * @param command 命令语句
     * @return 执行结果, 封装执行状态和执行结果
     */
    public static ExecCmdResult execCommand(Connection connection,String command){
        ExecCmdResult execCmdResult = new ExecCmdResult();
        Session session = null;
        try{
            session = connection.openSession();
            //执行命令
            session.execCommand(command);
            //解析结果
            String result = parseResult(session.getStdout());
            //解析结果为空,则表示执行命令发生了错误,尝试解析错误出输出
            if (result == null||result.length()==0){
                result = parseResult(session.getStderr());

            }else {
                execCmdResult.setSuccess(true);
            }
            //设置响应结果
            execCmdResult.setResult(result);
            logger.info(command + " ==>> " +execCmdResult.getResult());
            return execCmdResult;

        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

    public static String parseResult(InputStream inputStream) throws IOException{
        //读取输出流内容
        BufferedReader br = new BufferedReader(new InputStreamReader(inputStream,DEFAULT_CHARSET));
        StringBuffer resultSB = new StringBuffer();
        String line;
        while((line = br.readLine()) != null){
            resultSB.append(line+"\n");
        }
        //替换换行符
        String result = resultSB.toString().replaceAll("[\\t\\n\\r]", "");
        return result;

    }
}

ExecCmdResult 定义返回结果类

public class ExecCmdResult {

    //命令执行是否成功
    private boolean flag ;
    //输出结果
    private String result;

    public void setFlag(boolean success){
        this.flag = success;
    }

    public boolean getFlag() {
        return flag;
    }

    public String getResult(){
        return result;
    }
    public void setResult(String result){
        this.result = result;
    }

}

SSH2Demo 测试

import ch.ethz.ssh2.Connection;

public class SSH2Demo {

    public static void main(String[] args) {
        try {
            String host = "168.192.22.7";
            String username = "root";
            String password = "123456";
            Connection connection = SSH2Util.openConnection(host,username,password);
            String cpuInfo = "cat /proc/cpuinfo | grep \"cpu cores\" | uniq"; //服务器核数
            ExecCmdResult cup = SSH2Util.execCommand(connection,cpuInfo);
            connection.close();
        }
        catch (Exception a){
            a.printStackTrace();
        }
    }
}

到此这篇关于Java操作SSH2实现远程执行linux命令的文章就介绍到这了,更多相关Java SSH2远程执行linux命令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详细聊聊JDK中的反模式接口常量

    详细聊聊JDK中的反模式接口常量

    这篇文章主要给大家介绍了关于JDK中反模式接口常量的相关资料,文中通过实例代码介绍的非常详细,对大家学习或者使用jdk具有一定的参考学习价值,需要的朋友可以参考下
    2022-01-01
  • Java利用JSch实现SSH远程操作的技术指南

    Java利用JSch实现SSH远程操作的技术指南

    在日常开发中,许多应用需要通过 SSH 协议远程连接服务器来执行命令、上传或下载文件,JSch是一个功能强大的 Java 库,它提供了便捷的接口来实现 SSH 连接和其他远程管理功能,本文将介绍 JSch 的基本功能,并通过实际代码示例帮助您快速上手,需要的朋友可以参考下
    2025-03-03
  • java并发JUC工具包AtomicInteger原子整型语法基础

    java并发JUC工具包AtomicInteger原子整型语法基础

    这篇文章主要为大家介绍了java并发JUC工具包AtomicInteger原子整型语法基础,有需要的朋友可以借鉴参考希望能够有所帮助,祝大家多多进步
    2022-03-03
  • 基于Java实现Socket编程入门

    基于Java实现Socket编程入门

    Java最初是作为网络编程语言出现的,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket,本文就来介绍一下基于Java实现Socket编程入门,感兴趣的可以来了解一下
    2022-03-03
  • SpringBoot配置拦截器的示例

    SpringBoot配置拦截器的示例

    这篇文章主要介绍了SpringBoot配置拦截器的示例,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下
    2020-11-11
  • JDBC使用游标实现分页查询的方法

    JDBC使用游标实现分页查询的方法

    这篇文章主要介绍了JDBC使用游标实现分页查询的方法,实例分析了jdbc查询过程中游标的使用及查询分页相关实现技巧,需要的朋友可以参考下
    2016-08-08
  • Java压缩和解压缩ZIP文件实战案例

    Java压缩和解压缩ZIP文件实战案例

    这篇文章主要给大家介绍了关于Java压缩和解压缩ZIP文件的相关资料,ZIP是一种较为常见的压缩形式,最近项目中遇到了再Java中压缩和解压缩zip文件的需求,特此分享给大家,需要的朋友可以参考下
    2023-07-07
  • SpringBoot使用hutool操作FTP的详细过程

    SpringBoot使用hutool操作FTP的详细过程

    在使用SpringBoot结合hutool操作FTP时,遇到防火墙导致上传文件大小为0kb的问题,通过设置FTP为被动模式解决,本文详细解析了FTP的主动模式和被动模式的工作原理、安全性及适用场景,帮助理解FTP的连接方式和解决网络限制问题
    2024-09-09
  • Eclipse手动导入DTD文件实现方法解析

    Eclipse手动导入DTD文件实现方法解析

    这篇文章主要介绍了Eclipse手动导入DTD文件实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • MyBatis-Plus集成Druid环境搭建的详细教程

    MyBatis-Plus集成Druid环境搭建的详细教程

    这篇文章主要介绍了MyBatis-Plus集成Druid环境搭建的详细教程,需要的朋友可以参考下
    2020-08-08

最新评论