Java通过SSH连接路由器输入命令并读取响应的操作方法

 更新时间:2024年01月12日 09:01:37   作者:张晓风  
最近需要读取和修改华为路由器的配置,使用Java语言开发,通过SSH连接,输入命令并读取响应,接下来通过本文给大家介绍下Java通过SSH连接路由器,输入命令并读取响应,需要的朋友可以参考下

最近需要读取和修改华为路由器的配置,使用Java语言开发,通过SSH连接,输入命令并读取响应。

1.添加mwiede/jsch依赖

  • 如果使用Maven,可以在pom.xml文件中添加以下依赖:
<dependencies>
    <dependency>
        <groupId>com.github.mwiede</groupId>
        <artifactId>jsch</artifactId>
        <version>0.2.15</version>
    </dependency>
</dependencies>
  • 如果使用Gradle,则添加到build.gradle文件:
dependencies {
    implementation 'com.github.mwiede:jsch:0.2.15'
}

2.使用Jsch创建SSH连接,输入命令并返回响应

/** 
*  获取SSH命令响应
* @param userName        用户名
* @param password        密码
* @param host              ip地址
* @param port              端口
* @param commandList  命令列表
*/
public String getShellCmdRes(String userName, String password, String host, Integer port, List<String> commandList) throws JSchException, IOException {
        StringBuilder stringBuilder = new StringBuilder();
        JSch jsch = new JSch();
        Session session = jsch.getSession(userName, host, port());
        session.setPassword(password);
        session.setConfig("StrictHostKeyChecking", "no");
        session.connect();
        ChannelShell channel = (ChannelShell) session.openChannel("shell");
        // 获取输入输出流
        OutputStream inputStreamForTheChannel = channel.getOutputStream();
        InputStream outputStreamForTheChannel = channel.getInputStream();
        // 连接通道
        channel.connect();
        PrintStream commander = new PrintStream(inputStreamForTheChannel, true);
        byte[] tmp = new byte[1024];
        while (true) {
            while (outputStreamForTheChannel.available() > 0) {
                int i = outputStreamForTheChannel.read(tmp, 0, 1024);
                if (i < 0) {
                    break;
                }
                String output = new String(tmp, 0, i);
                // 读取响应
                stringBuilder.append(output);
                stringBuilder.append(System.lineSeparator());
                // 发送命令
                commandList.forEach(command -> {
                    commander.println(command);
                });
            }
            if (channel.isClosed()) {
                if (outputStreamForTheChannel.available() > 0) {
                    continue;
                }
                break;
            }
            try {
                Thread.sleep(10);
            } catch (Exception ee) {
            }
        }
        // 关闭通道和会话
        channel.disconnect();
        session.disconnect();
        return stringBuilder.toString();
    }

3.调用上文方法

3.1 单条命令

记得结束时加入退出语句,这里以路由器为例,用quit退出

List<String> commandList = new  ArrayList<>();
// 查看
commandList.add("display bfd session all");
// 退出会话
commandList.add("quit");
// 获取响应
String response = getShellCmdRes("admin", "admin", "1.1.1.1", 22, List<String> commandList)

3.2 多条命令

如果是多条命令,每进入一个会话,就多一个退出语句

List<String> commandList = new ArrayList<>();
// 进入system-view
commandList.add("system-view");
// 进入Tunnel 0/0/5
commandList.add("interface Tunnel 0/0/5");
// 查看信息
commandList.add("display this");
// 退出Tunnel 0/0/5
commandList.add("quit");
// 退出system-view
commandList.add("quit");
// 退出会话
commandList.add("quit");
// 获取响应
String response = getShellCmdRes("admin", "admin", "1.1.1.1", 22, List<String> commandList)

到此这篇关于Java通过SSH连接路由器,输入命令并读取响应的文章就介绍到这了,更多相关Java输入命令并读取响应内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java使用设计模式中的工厂方法模式实例解析

    Java使用设计模式中的工厂方法模式实例解析

    当系统准备为用户提供某个类的子类的实例,又不想让用户代码和该子类形成耦合时,就可以使用工厂方法模式来设计系统.工厂方法模式的关键是在一个接口或抽象类中定义一个抽象方法,下面我们会具体介绍Java使用设计模式中的工厂方法模式实例解析.
    2016-05-05
  • SpringBoot/SpringCloud使用jasypt-spring-boot实现配置文件加密

    SpringBoot/SpringCloud使用jasypt-spring-boot实现配置文件加密

    在现代软件开发和部署中,应用程序的配置文件常常包含敏感信息,本文将详细介绍如何使用 jasypt-spring-boot 库,在 Spring Boot 和 Spring Cloud 项目中实现配置文件内容的加密与解密,需要的朋友可以参考下
    2026-05-05
  • SpringBoot读取resource目录下文件失败的原因及解决方案

    SpringBoot读取resource目录下文件失败的原因及解决方案

    在idea中运行时,有些resource下文件读取工具类能够正常获取读取到文件,但是通过java–jar的方式去运行jar包,此时resource下文件读取工具类读取文件就失效了,本文就给大家介绍一下SpringBoot读取resource目录下文件失败解决方案,需要的朋友可以参考下
    2023-08-08
  • 如何在Spring Boot中使用MyBatis访问数据库

    如何在Spring Boot中使用MyBatis访问数据库

    MyBatis可以通过简单的XML或者注解来配置和映射原始类型,接口,和Java POJO为数据库中记录,使用MyBatis帮助我们解决各种问题,本文介绍如何在Spring Boot中使用MyBatis访问数据库,感兴趣的朋友一起看看吧
    2023-11-11
  • SpringBoot 整合Mybatis-Plus并输出SQL日志示例详解

    SpringBoot 整合Mybatis-Plus并输出SQL日志示例详解

    这篇文章主要介绍了SpringBoot整合Mybatis-Plus并输出SQL日志,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • Spring boot easyexcel 实现复合数据导出、按模块导出功能

    Spring boot easyexcel 实现复合数据导出、按模块导出功能

    这篇文章主要介绍了Spring boot easyexcel 实现复合数据导出、按模块导出,实现思路流程是准备一个导出基础填充模板,默认填充key,本文给大家介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • SpringBoot实现不同接口指定上传文件大小的具体步骤

    SpringBoot实现不同接口指定上传文件大小的具体步骤

    这篇文章主要介绍了在Spring Boot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于接口自定义值,确保验证逻辑正确执行,需要的朋友可以参考下
    2025-08-08
  • Spring data jpa的使用与详解(复杂动态查询及分页,排序)

    Spring data jpa的使用与详解(复杂动态查询及分页,排序)

    这篇文章主要介绍了Spring data jpa的使用与详解(复杂动态查询及分页,排序),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • JVM完全解读之Metaspace解密源码分析

    JVM完全解读之Metaspace解密源码分析

    通过这篇文章,你将可以了解到,为什么会有metaspace?metaspace的组成,metaspace的VM参数,jstat里我们应该关注metaspace的哪些值,有需要的朋友可以借鉴参考下
    2022-01-01
  • java编程SpringSecurity入门原理及应用简介

    java编程SpringSecurity入门原理及应用简介

    Spring 是非常流行和成功的 Java 应用开发框架,Spring Security 正是 Spring 家族中的成员。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案
    2021-09-09

最新评论