package com.wgcloud.service; import com.jcraft.jsch.ChannelExec; import com.jcraft.jsch.JSch; import com.jcraft.jsch.JSchException; import com.jcraft.jsch.Session; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Properties; @Service public class RouterConnectionService { private Session session; // /** // * 连接到路由器 // */ // public boolean connect() { // try { // JSch jsch = new JSch(); // session = jsch.getSession(routerUsername, routerHost, 22); // session.setPassword(routerPassword); // // // 设置不进行主机密钥检查 // Properties config = new Properties(); // config.put("StrictHostKeyChecking", "no"); // session.setConfig(config); // // session.connect(5000); // 5秒超时 // return true; // } catch (JSchException e) { // System.err.println("连接路由器失败: " + e.getMessage()); // return false; // } // } /** * 连接到路由器 */ public boolean connect(String username,String hostname,String password) { try { JSch jsch = new JSch(); session = jsch.getSession(username, hostname, 22); session.setPassword(password); // 设置不进行主机密钥检查 Properties config = new Properties(); config.put("StrictHostKeyChecking", "no"); session.setConfig(config); session.connect(5000); // 5秒超时 return true; } catch (JSchException e) { System.err.println("连接路由器失败: " + e.getMessage()); return false; } } /** * 断开连接 */ public void disconnect() { if (session != null && session.isConnected()) { session.disconnect(); } } /** * 执行路由器命令 */ public String executeCommand(String command,String username,String password,String hostname) { // if (!isConnected()) { // if (!connect(username,hostname,password)) { // return null; // } // } if (!connect(username,hostname,password)) { return null; } try { ChannelExec channel = (ChannelExec) session.openChannel("exec"); channel.setCommand(command); BufferedReader reader = new BufferedReader(new InputStreamReader(channel.getInputStream())); StringBuilder output = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { output.append(line).append("\n"); } reader.close(); channel.disconnect(); disconnect(); return output.toString(); } catch (Exception e) { System.err.println("执行命令失败: " + e.getMessage()); disconnect(); // 执行失败时断开连接,下次重连 return null; } } /** * 检查连接状态 */ public boolean isConnected() { return session != null && session.isConnected(); } }