Java程序使用JSch和JDBC通过SSH连接到MySQL
时间:2020-02-23 14:36:43 来源:igfitidea点击:
最近在我的一个项目中,我不得不连接到在启用SSH的服务器上设置的远程数据库。
由于它位于启用SSH的服务器上,因此我们无法使用JDBC连接API直接将其连接。
为此,我们首先必须创建一个SSH会话,然后使用端口转发将请求转发到服务器并连接到数据库。
我使用JSch端口转发并连接到数据库来实现此目的。
使用JSch连接到远程SSH MySQL数据库的Java程序
这是我编写的用于端口转发和连接到远程数据库的程序。
package com.theitroad.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 the remote database through SSH using port forwarding * @author hyman@theitroad * @throws SQLException */ public static void main(String[] args) throws SQLException { int lport=5656; String rhost="secure.theitroad.local"; String host="secure.theitroad.local"; 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.theitroad.local:3306 Port Forwarded Database connection established DONE Closing Database Connection Closing SSH Connection