繁体   English   中英

在 Java 中通过 SSH 连接到 MongoDB

[英]Connection to MongoDB by SSH in Java

要从 Java 连接到 MongoDB,我使用:

MongoClient mongoClient = new MongoClient("localhost", port);

它工作正常。 现在我想连接到必须通过 SSH 登录的机器上的 MongoDB。 我尝试为此使用JSch ,这是我的代码:

String host = "host";
String user = "user";
String password = "pass";
int port = 22;

int tunnelLocalPort = 3309;
String tunnelRemoteHost = "host";
int tunnelRemotePort = 3306;

JSch jsch = new JSch();
Session session = jsch.getSession(user, host, port);
session.setPassword(password);
localUserInfo lui = new localUserInfo();
session.setUserInfo(lui);
session.connect();
session.setPortForwardingL(tunnelLocalPort, tunnelRemoteHost, tunnelRemotePort);

一切看起来都很好,我可以连接,但这里有一个问题:

MongoClient mongoClient = new MongoClient("localhost", 27020);
List<String> databaseNames = mongoClient.getDatabaseNames();
LOG.info("DB names=" + databaseNames);

错误是:

Aug 21, 2014 4:12:29 PM com.mongodb.DBTCPConnector initDirectConnection
Warnung: Exception executing isMaster command on localhost/127.0.0.1:27020
java.io.IOException: couldn't connect to [localhost/127.0.0.1:27020] bc:java.net.ConnectException: Connection refused: connect
    at com.mongodb.DBPort._open(DBPort.java:214)

我应该设置更多连接吗? 当我检查session.isConnected()输出为true时,如何从 Java 检查程序连接。 当我使用 PuTTY 时一切正常。

从上面的代码中,我认为您正在将远程 3309 端口隧道连接到 3309(而不是 27020)上的本地端口。

根据您的代码:

 int tunnelLocalPort = 3309; String tunnelRemoteHost = "host"; int tunnelRemotePort = 3306;
  1. 检查远程主机的主机和端口并相应地进行映射。
  2. 将本地端口设置为您在代码中侦听的端口 (27020)。

首先尝试没有代码的整个练习:

  1. 使用 PuTTY(或命令行,如果您使用的是 Linux)隧道连接远程 MongodDB 服务器。
  2. 通过 Mongo 连接到您映射远程端口的本地端口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM