我无法使用java通过ssh隧道连接到db

sdnqo3pr  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(618)

我有带ssh隧道的sqlbd。我想用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(…)”
请帮帮我

ezykj2lf

ezykj2lf1#

像这样的调试可能最好用wireshark来完成,它可以让您看到实际发生的事情,并快速找出不太正确的地方(tm)。如果您不熟悉该工具,有很多教程可供选择。
我认为大部分情况下,你只需要让事情匹配起来,它就会正常工作: LocalPort 当前设置为 1234 ,但是 DriverManager.getConnection 正在尝试连接到 3306 .
脚本片段不完整,所以我假设 url 设置为
localhost/127.0.0.1其他。。。 jsch.getSession 以及 session.setPortForwardingL 两者都使用 proxyHost 作为目的地:我假设您在主机上有防火墙(这就是您使用ssh的原因),因此尝试本地连接到外部接口地址也可能会被阻止。也就是说 session.setPortForwardingL 也应该是localhost/127.0.0.1。

相关问题