在项目中,如果要连接到在启用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数据库,但可以使用此方法连接到任何其他数据库或企业信息系统。