【问题标题】:Connect to remote MySQL from my local machine through Jumpbox/Proxy通过 Jumpbox/Proxy 从我的本地机器连接到远程 MySQL
【发布时间】: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 连接。 :(

隧道在这里有帮助吗?

【问题讨论】:

    标签: java mysql amazon-web-services ssh ssh-tunnel


    【解决方案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

    【讨论】:

    • 如果不更改代码,我能做些什么吗?有一个现有的代码我没有什么要改变的。我们可以在机器级别做点什么吗?
    猜你喜欢
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多