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)閉通道和會(huì)話 channel.disconnect(); session.disconnect(); return stringBuilder.toString(); }
3.調(diào)用上文方法
3.1 單條命令
記得結(jié)束時(shí)加入退出語句,這里以路由器為例,用quit退出
List<String> commandList = new ArrayList<>(); // 查看 commandList.add("display bfd session all"); // 退出會(huì)話 commandList.add("quit"); // 獲取響應(yīng) String response = getShellCmdRes("admin", "admin", "1.1.1.1", 22, List<String> commandList)
3.2 多條命令
如果是多條命令,每進(jìn)入一個(gè)會(huì)話,就多一個(gè)退出語句
List<String> commandList = new ArrayList<>(); // 進(jìn)入system-view commandList.add("system-view"); // 進(jìn)入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"); // 退出會(huì)話 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)文章
Java中實(shí)現(xiàn)OCR識(shí)別讀取圖片中的文字
圖片內(nèi)容一般無法編輯,如果想要讀取圖片中的文本,我們需要用到OCR工具,本文將介紹如何在Java中實(shí)現(xiàn)OCR識(shí)別讀取圖片中的文字,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04spring security認(rèn)證異常后返回中文提示的問題
這篇文章主要介紹了spring security認(rèn)證異常后返回中文提示的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02JavaWeb Session失效時(shí)間設(shè)置方法
這篇文章主要介紹了JavaWeb Session失效時(shí)間設(shè)置方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-12-12如何解決IDEA沒有新建servlet選項(xiàng)問題
這篇文章主要介紹了如何解決IDEA沒有新建servlet選項(xiàng)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04Spring?Boot整合持久層之JdbcTemplate多數(shù)據(jù)源
持久層是JavaEE中訪問數(shù)據(jù)庫的核心操作,SpringBoot中對(duì)常見的持久層框架都提供了自動(dòng)化配置,例如JdbcTemplate、JPA 等,MyBatis 的自動(dòng)化配置則是MyBatis官方提供的。接下來分別向讀者介紹Spring Boot整合這持久層技術(shù)中的整合JdbcTemplate2022-08-08