通过 Jumpbox/Proxy 从我的本地机器连接到远程 MySQL

Posted

技术标签:

【中文标题】通过 Jumpbox/Proxy 从我的本地机器连接到远程 MySQL【英文标题】:Connect to remote MySQL from my local machine through Jumpbox/Proxy 【发布时间】:2020-11-14 08:01:50 【问题描述】:

我可以从本地机器通过 Jumpbox/proxy 连接到远程 mysql

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

所以基本上我的 Java 应用程序可以通过 AWS 机器从我的本地机器连接到远程服务器。

这边 本地机器(java 应用程序)===> AWS 机器(A)==> Mysql 服务器(B)

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

隧道在这里有帮助吗?

【问题讨论】:

【参考方案1】:

你可以使用JSch

http://www.jcraft.com/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();
            
        
    


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

【讨论】:

如果不更改代码,我能做些什么吗?有一个现有的代码我没有什么要改变的。我们可以在机器级别做点什么吗?

以上是关于通过 Jumpbox/Proxy 从我的本地机器连接到远程 MySQL的主要内容,如果未能解决你的问题,请参考以下文章

无法从Virtualbox连接到SQL Server

从 Flutter 应用通过本地网络连接到 Firebase 函数模拟器

无法从我的本地 ubuntu 机器推送到 aws ec2

如何让 PyC​​harm 从我的本地包存储库更新?

*** 连接到该 *** 的远程机器的 IP

我想知道我如何能够从我的 iphone 上的 windows 网站开发一个本地主机网站