通过Jumpbox/代理从我的本地机器连接远程MySQL。

huangapple 未分类评论43阅读模式
英文:

Connect to remote MySQL from my local machine through Jumpbox/Proxy

问题

我可以通过跳板机/代理从我的本地机器连接到远程MySQL吗?

我在AWS机器(A)上部署了一个Java应用程序,该应用程序可以访问并连接到远程MySQL服务器(B)。现在,当我需要在本地测试我的Java应用程序时,无法连接到远程MySQL服务器(B)。

因此,基本上我的Java应用程序能否通过AWS机器从本地机器连接到远程服务器。

具体方式如下:
本地机器(Java应用程序)===》AWS机器(A)===》MySQL服务器(B)

AWS机器(A)只能通过SSH连接。:(

隧道技术可以在这里有所帮助。

英文:

Can I connect to remote Mysql via Jumpbox/proxy from my local machine.

I have a java application deployed in AWS machine(A) which has access and can connect to remote Mysql server(B). Now when I need to test my Java application locally I can not connect to Remote Mysql server(B).

So basically can my Java application connect to remote server from my local machine via AWS machine.

This way
Local Machine(java Application) ===> AWS machine(A)==> Mysql Server(B)

AWS Machine(A) can only be connected through SSH. 通过Jumpbox/代理从我的本地机器连接远程MySQL。

Can tunneling help here?

答案1

得分: 0

you can use JSch

http://www.jcraft.com/jsch/

an example of how to use it

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();
            }
        }
    }

}

Reference:
https://www.journaldev.com/235/java-mysql-ssh-jsch-jdbc
英文:

you can use JSch

http://www.jcraft.com/jsch/

an example of how to use it

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();
	    	}
	    }
	}

}

Reference:
https://www.journaldev.com/235/java-mysql-ssh-jsch-jdbc

huangapple
  • 本文由 发表于 2020年7月24日 20:43:32
  • 转载请务必保留本文链接:https://java.coder-hub.com/63073824.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定