Рубрики
Без рубрики

Java-программа для подключения к MySQL по SSH с использованием JSch и JDBC

Java-программа для подключения к удаленной базе данных через SSH с использованием переадресации портов, переадресации портов ssh, jdbc mysql по ssh, пример ssh-туннеля jdbc.

Автор оригинала: Pankaj Kumar.

Недавно в одном из моих проектов мне пришлось подключиться к удаленной базе данных, которая была настроена на сервере с поддержкой SSH. Поскольку он находился на сервере с поддержкой SSH, мы не можем подключить его напрямую с помощью API подключения JDBC. Для этого нам сначала нужно создать сеанс SSH, а затем с помощью переадресации портов мы можем переслать запрос на сервер и подключиться к базе данных.

Я достиг этого с помощью JSch Переадресации портов, а затем подключения к базе данных.

Java-программа для подключения к удаленной базе данных SSH MySQL с помощью JSch

Вот программа, которую я написал для переадресации портов и подключения к удаленной базе данных.

package com.journaldev.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 Pankaj@JournalDev
	 * @throws SQLException 
	 */
	public static void main(String[] args) throws SQLException {

		int lport=5656;
	    String rhost="secure.journaldev.com";
	    String host="secure.journaldev.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, но вы можете подключиться к любой другой базе данных или корпоративным информационным системам, используя этот подход.