在项目中,如果要连接到在启用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