java Jsch实现跳板机操作远程数据库
jsch是一个纯java实现的ssh,作用有很多,比如实现一个sftp或者ftp,java执行shell命令等等,今天用做于模拟登陆跳板机然后操作数据库。
首先导入maven依赖,数据库用的是mysql
<dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.53</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.36</version> </dependency>
然后建立一个ssh通道模拟登陆到跳板机
public class JDBCSSHChannel { /** * * @param localPort 本地host 建议mysql 3306 redis 6379 * @param sshHost ssh host * @param sshPort ssh port * @param sshUserName ssh 用户名 * @param sshPassWord ssh密码 * @param remotoHost 远程机器地址 * @param remotoPort 远程机器端口 */ public static void goSSH(int localPort, String sshHost, int sshPort, String sshUserName, String sshPassWord, String remotoHost, int remotoPort) { try { JSch jsch = new JSch(); //登陆跳板机 Session session = jsch.getSession(sshUserName, sshHost, sshPort); session.setPassword(sshPassWord); session.setConfig("StrictHostKeyChecking", "no"); session.connect(); //通过ssh连接到mysql机器 int assinged_port = session.setPortForwardingL(localPort, remotoHost, remotoPort); } catch (Exception e) { e.printStackTrace(); } } }
然后连接mysql,在连接mysql前调用下goSSH方法建立跳板机通道即可
public static Connection connDB() { // 声明Connection对象 Connection con = null; // 驱动程序名 String driver = "com.mysql.jdbc.Driver"; // URL指向要访问的数据库名mydata String url = "jdbc:mysql://192.168.1.1:3306/TEST"; // MySQL配置时的用户名 String user = "root"; // MySQL配置时的密码 String password = "123456"; // 遍历查询结果集 try { // 加载驱动程序 try { Class.forName(driver); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 1.建立跳板机通道 // goSSH(localPort, sshHost, sshPort, sshUserName, sshPassWord, remotoHost, // remotoPort); // 2.getConnection()方法,连接MySQL数据库!! con = DriverManager.getConnection(url, user, password); } catch (SQLException e) { // TODO: handle exception e.printStackTrace(); } return con; }