Java程序:使用JSch和JDBC通过SSH连接到MySQL

在项目中,如果要连接到在启用SSH的服务器上设置的远程数据库。 由于它是在支持SSH的服务器上,我们无法使用JDBC连接API直接连接它。 为此,首先需要创建SSH会话,然后使用端口转发,将请求转发到服务器并连接到数据库。使用JSch端口转发实现了这一点,然后连接到数据库。

这是端口转发和连接到远程数据库而编写的程序。

 package com.yiibai.java.ssh  import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException;  import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; import java.sql.Connection;   public class MySqlConnOverSSH {      /**      * Java Program to connect to remote database through SSH using port forwarding      * @author admin@yiibai.com      * @throws SQLException       */     public static void main(String[] args) throws SQLException {          int lport=5656;         String rhost="secure.xxxxx.com";         String host="secure.xxxxx.com";         int rport=3306;         String user="sshuser";         String password="sshpassword";         String dbuserName = "mysql";         String dbpassword = "mysql123";         String url = "jdbc:mysql://localhost:"+lport+"/mydb";         String driverName="com.mysql.jdbc.Driver";         Connection conn = null;         Session session= null;         try{             //Set StrictHostKeyChecking property to no to avoid UnknownHostKey issue             java.util.Properties config = new java.util.Properties();              config.put("StrictHostKeyChecking", "no");             JSch jsch = new JSch();             session=jsch.getSession(user, host, 22);             session.setPassword(password);             session.setConfig(config);             session.connect();             System.out.println("Connected");             int assinged_port=session.setPortForwardingL(lport, rhost, rport);             System.out.println("localhost:"+assinged_port+" -> "+rhost+":"+rport);             System.out.println("Port Forwarded");              //mysql database connectivity             Class.forName(driverName).newInstance();             conn = DriverManager.getConnection (url, dbuserName, dbpassword);             System.out.println ("Database connection established");             System.out.println("DONE");         }catch(Exception e){             e.printStackTrace();         }finally{             if(conn != null && !conn.isClosed()){                 System.out.println("Closing Database Connection");                 conn.close();             }             if(session !=null && session.isConnected()){                 System.out.println("Closing SSH Connection");                 session.disconnect();             }         }     }  } 

上述程序的输出是:

 Connected localhost:5656 -> secure.journaldev.com:3306 Port Forwarded Database connection established DONE Closing Database Connection Closing SSH Connection 

在这里,连接到MySql数据库,但可以使用此方法连接到任何其他数据库或企业信息系统。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/264071.html

(0)
上一篇 2022年6月6日
下一篇 2022年6月6日

相关推荐

发表回复

登录后才能评论