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输入命令并读取响应内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringBoot/SpringCloud使用jasypt-spring-boot实现配置文件加密
在现代软件开发和部署中,应用程序的配置文件常常包含敏感信息,本文将详细介绍如何使用 jasypt-spring-boot 库,在 Spring Boot 和 Spring Cloud 项目中实现配置文件内容的加密与解密,需要的朋友可以参考下2026-05-05
SpringBoot读取resource目录下文件失败的原因及解决方案
在idea中运行时,有些resource下文件读取工具类能够正常获取读取到文件,但是通过java–jar的方式去运行jar包,此时resource下文件读取工具类读取文件就失效了,本文就给大家介绍一下SpringBoot读取resource目录下文件失败解决方案,需要的朋友可以参考下2023-08-08
SpringBoot 整合Mybatis-Plus并输出SQL日志示例详解
这篇文章主要介绍了SpringBoot整合Mybatis-Plus并输出SQL日志,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-06-06
Spring boot easyexcel 实现复合数据导出、按模块导出功能
这篇文章主要介绍了Spring boot easyexcel 实现复合数据导出、按模块导出,实现思路流程是准备一个导出基础填充模板,默认填充key,本文给大家介绍的非常详细,需要的朋友可以参考下2023-09-09
Spring data jpa的使用与详解(复杂动态查询及分页,排序)
这篇文章主要介绍了Spring data jpa的使用与详解(复杂动态查询及分页,排序),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-11-11


最新评论