Мне нужно подключиться к MongoDB через туннель SSH, и при переадресации порта JSch выдается ошибка:
локальный порт 127.0.0.1:27017 не может быть привязан
Я должен подключиться к MongoDB через туннель SSH.Я нашел код здесь на stackoverflow, и это решило мою проблему.Но через несколько недель тот же код перестал работать.Я не могу определить причину этого.Кроме того, используя те же учетные данные, которые я использую в коде Java, я также пытался подключиться к нему через CMD с помощью команды SSH -L
, и она работала правильно.Я также могу подключиться к MongoDB для использования тех же учетных данных из NoSQLBrowser.Я попробовал и искал все на Google, и проблема все еще остается нерешенной.Ниже приведен код для этого -
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
JSch jsch = new JSch();
SSH_SESSION = null;
SSH_SESSION = jsch.getSession(SSH_USER, SSH_HOST, SSH_PORT);
SSH_SESSION.setPassword(SSH_PASSWORD);
SSH_SESSION.setConfig(config);
SSH_SESSION.connect();
SSH_SESSION.setPortForwardingL(27017, "localhost", 22);
MongoClient mongoClient = new MongoClient(LOCAL_HOST, LOCAL_PORT);
mongoClient.setReadPreference(ReadPreference.nearest());
MongoCursor<String> dbNames = mongoClient.listDatabaseNames().iterator();
while (dbNames.hasNext()) {
System.out.println(dbNames.next());```
Я получаю следующую ошибку на линии переадресации портов: -
com.jcraft.jsch.JSchException: PortForwardingL: local port 127.0.0.1:27017 cannot be bound.
at com.jcraft.jsch.PortWatcher.<init>(PortWatcher.java:158)
at com.jcraft.jsch.PortWatcher.addPort(PortWatcher.java:110)
at com.jcraft.jsch.Session.setPortForwardingL(Session.java:1847)
at com.jcraft.jsch.Session.setPortForwardingL(Session.java:1828)
at com.jcraft.jsch.Session.setPortForwardingL(Session.java:1809)
at com.jcraft.jsch.Session.setPortForwardingL(Session.java:1792)
at com.schenker.boot.bootdemo.controller.TestMongoAgain.main(TestMongoAgain.java:35)
Caused by: java.net.BindException: Address already in use: JVM_Bind
at java.net.DualStackPlainSocketImpl.bind0(Native Method)
at java.net.DualStackPlainSocketImpl.socketBind(Unknown Source)
at java.net.AbstractPlainSocketImpl.bind(Unknown Source)
at java.net.PlainSocketImpl.bind(Unknown Source)
at java.net.ServerSocket.bind(Unknown Source)
at java.net.ServerSocket.<init>(Unknown Source)
at com.jcraft.jsch.PortWatcher.<init>(PortWatcher.java:150)
... 6 more
com.jcraft.jsch.JSchException: PortForwardingL: local port 127.0.0.1:27017 is not registered.
at com.jcraft.jsch.PortWatcher.delPort(PortWatcher.java:118)
at com.jcraft.jsch.Session.delPortForwardingL(Session.java:1876)
at com.jcraft.jsch.Session.delPortForwardingL(Session.java:1865)
Кроме того, очень странная вещь, которая вместо PortForwardingL
если я использую PortForwardingR
, он не выдает никакой ошибки, но в следующей строке он подключается к моей локальной MongoDB.Может кто-нибудь помочь мне с этим?