我正在使用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中指定了哪里.