当前位置:  开发笔记 > 编程语言 > 正文

使用具有特定mysql主机的远程主机上的SSH隧道连接到MySql数据库

如何解决《使用具有特定mysql主机的远程主机上的SSH隧道连接到MySql数据库》经验,为你挑选了0个好方法。

我正在使用Jsch连接到远程mysql数据库,其中ssh主机与mysql主机不同,如下图的上半部分所示: 在此输入图像描述

以下是我用于SSH连接的代码:

private static void connectSSH() throws SQLException {
    try {
        java.util.Properties config = new java.util.Properties();
        JSch jsch = new JSch();
        jsch.setLogger(new MyLogger());
        session = jsch.getSession(sshUser, sshHost, 22);
        jsch.addIdentity(SshKeyFilepath, sshPassword);
        config.put("StrictHostKeyChecking", "no");
        config.put("ConnectionAttempts", "3");
        session.setConfig(config);
        session.connect();

        System.out.println("SSH Connected");

        Class.forName(driverName).newInstance();

        int assinged_port = session.setPortForwardingL(localPort, remoteHost, remotePort);

        System.out.println("localhost:" + assinged_port + " -> " + sshHost + ":" + remotePort);
        System.out.println("Port Forwarded");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

并最终使用以下代码连接到数据库:

 Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:" + localPort, dbUser, dbPassword);

我能够成功建立SSH连接但是在下面的行中执行挂起:

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:" + localPort, dbUser, dbPassword);

我通过在命令行上连接来检查我的SSH和数据库凭据,我可以使用连接到数据库

mysql -h host1 -u "myusername" -p"mypasswordhere"

我想这个问题可能是因为在远程主机上mysql主机不是 localhost而是host1,我不知道在jdbc url中指定了哪里.

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有