我无法使用Java使用ssh-tunnel连接到DB。

时间:2018-11-01 14:05:57

标签: java mysql database ssh-tunnel

我有带有ssh-tunnel的sql-BD。我想使用Java连接到该BD

我使用的代码:

    Connection con = null;
    JSch jsch = new JSch();

    int localPort = 1234;

    Session session = jsch.getSession(proxyUser, proxyHost, 22);
    java.util.Properties config = new java.util.Properties();
    config.put("StrictHostKeyChecking", "no");
    session.setConfig(config);
    session.setPassword(proxyPassword);

    session.setConfig("PreferredAuthentications", "publickey,keyboard-interactive,password");
    session.connect();
    session.setPortForwardingL(localPort, proxyHost, 3306);


    Properties properties = new Properties();
    properties.setProperty("user", user);
    properties.setProperty("password", password);
    properties.setProperty("useUnicode", "true");
    properties.setProperty("characterEncoding", "UTF-8");
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    con = DriverManager.getConnection(
            "jdbc:mysql://" + url + ":3306/" + nameBD + "?autoReconnect=true", properties);

错误行 “无法建立与数据库服务器的连接。尝试重新连接3次。放弃”

执行此错误: “ con = DriverManager.getConnection(...)

请帮助我

1 个答案:

答案 0 :(得分:0)

使用wireshark进行此类调试可能是最好的方法,它可以使您看到实际发生的事情,并迅速找出不正确的地方(tm)。如果您不熟悉该工具,则有很多tutorials可供选择。

我认为大多数情况下,您只需要使事物匹配就可以了:

  • LocalPort当前设置为1234,但是DriverManager.getConnection 正在尝试连接到3306
  • 脚本段不完整,因此我假设url设置为
    本地主机/127.0.0.1 ...
  • jsch.getSessionsession.setPortForwardingL都使用proxyHost作为目的地:我假设您的主机上有防火墙(这就是为什么您使用ssh),因此尝试在本地连接到外部接口地址也可能被阻止。这意味着session.setPortForwardingL也可能也是localhost / 127.0.0.1。