通过SSH连接到MongoDB

时间:2014-08-21 14:18:24

标签: java mongodb ssh

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

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

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

    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时,我如何检查程序是否连接。当我使用putty时,一切正常。

1 个答案:

答案 0 :(得分:0)

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

根据您的代码:

  

int tunnelLocalPort = 3309;   String tunnelRemoteHost =&#34; host&#34 ;;   int tunnelRemotePort = 3306;

  1. 检查远程主机的主机和端口并相应地映射它。
  2. 将本地端口设置为您在代码中收听的内容(27020)。
  3. 首先尝试没有代码的整个练习: 1.使用putty(或命令行,如果你在linux上)隧道远程MongodDB服务器。 2.通过mongo连接到映射远程端口的本地端口。