Java通過SSH連接路由器輸入命令并讀取響應(yīng)的操作方法
更新時間:2024年01月12日 09:01:37 作者:張曉風
最近需要讀取和修改華為路由器的配置,使用Java語言開發(fā),通過SSH連接,輸入命令并讀取響應(yīng),接下來通過本文給大家介紹下Java通過SSH連接路由器,輸入命令并讀取響應(yīng),需要的朋友可以參考下
最近需要讀取和修改華為路由器的配置,使用Java語言開發(fā),通過SSH連接,輸入命令并讀取響應(yīng)。
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創(chuàng)建SSH連接,輸入命令并返回響應(yīng)
/**
* 獲取SSH命令響應(yīng)
* @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);
// 讀取響應(yīng)
stringBuilder.append(output);
stringBuilder.append(System.lineSeparator());
// 發(fā)送命令
commandList.forEach(command -> {
commander.println(command);
});
}
if (channel.isClosed()) {
if (outputStreamForTheChannel.available() > 0) {
continue;
}
break;
}
try {
Thread.sleep(10);
} catch (Exception ee) {
}
}
// 關(guān)閉通道和會話
channel.disconnect();
session.disconnect();
return stringBuilder.toString();
}3.調(diào)用上文方法
3.1 單條命令
記得結(jié)束時加入退出語句,這里以路由器為例,用quit退出
List<String> commandList = new ArrayList<>();
// 查看
commandList.add("display bfd session all");
// 退出會話
commandList.add("quit");
// 獲取響應(yīng)
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");
// 獲取響應(yīng)
String response = getShellCmdRes("admin", "admin", "1.1.1.1", 22, List<String> commandList)

到此這篇關(guān)于Java通過SSH連接路由器,輸入命令并讀取響應(yīng)的文章就介紹到這了,更多相關(guān)Java輸入命令并讀取響應(yīng)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring?Boot整合持久層之JdbcTemplate多數(shù)據(jù)源
持久層是JavaEE中訪問數(shù)據(jù)庫的核心操作,SpringBoot中對常見的持久層框架都提供了自動化配置,例如JdbcTemplate、JPA 等,MyBatis 的自動化配置則是MyBatis官方提供的。接下來分別向讀者介紹Spring Boot整合這持久層技術(shù)中的整合JdbcTemplate2022-08-08

