Java使用SSH连接MongoDB

一、环境

在Java中可以使用mongodb-drivercom.jcraft来实现Java中使用SSH连接MongoDB。

maven配置

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver</artifactId>
    <version>3.12.10</version>
</dependency>

<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.55</version>
</dependency>

二、使用

可以先通过JSch库使用SSH连接到MongoDB所有的服务器,再设置经JSch从本地端口到远程MongoDB端口的转发,最后使用mongodb-driver连接本地的转发端口就可以连接服务器了。

实现代码

package com.application;

import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.mongodb.*;
import com.mongodb.client.MongoDatabase;
import org.bson.codecs.configuration.CodecRegistries;
import org.bson.codecs.configuration.CodecRegistry;
import org.bson.codecs.pojo.PojoCodecProvider;

import java.net.URI;

public class MongoAdmin {
    // 数据库连接参数
    private static final String MONGODB_URI = "mongodb://root:123456@127.0.0.1:3717/admin";

    private static final String SSH_USER = "root";          // ssh账号
    private static final String SSH_PASSWORD = ".";         // ssh密码,若使用密钥且没密码时填空
    private static final String SSH_PRVKEY = "./ssh.pem";   // ssh密钥,若使用密码登录时为空
    private static final String SSH_HOST = "192.168.0.105"; // ssh服务器
    private static final Integer SSH_PORT = 22;             // ssh端口

    public static void test() {
        try {
            URI uri = new URI(MONGODB_URI);

            java.util.Properties config = new java.util.Properties();

            // 设置ssh自动接受新的公钥
            config.put("StrictHostKeyChecking","no");

            JSch jsch = new JSch();

            // 设置ssh密钥
            if (!"".equals(SSH_PRVKEY)){
                jsch.addIdentity(SSH_PRVKEY);
            }

            Session sshSession = jsch.getSession(SSH_USER, SSH_HOST, SSH_PORT);
            if (!"".equals(SSH_PASSWORD)){
                sshSession.setPassword(SSH_PASSWORD);
            }
            sshSession.setConfig(config);
            sshSession.connect();

            // 设置端口转发,将远程MongoDB端口转发为本地MongoDB对应端口
            sshSession.setPortForwardingL(uri.getPort(), uri.getHost(), uri.getPort());

            // 创建MongoDB连接
            PojoCodecProvider pojoCodecProvider =  PojoCodecProvider.builder().automatic(true).build();
            CodecRegistry codecRegistry = CodecRegistries.fromRegistries(MongoClient.getDefaultCodecRegistry(),
                    CodecRegistries.fromProviders(pojoCodecProvider));

            MongoClientOptions.Builder optionsBuilder = MongoClientOptions.builder()
                    .codecRegistry(codecRegistry).serverSelectionTimeout(1000);

            MongoClientURI clientUri = new MongoClientURI(MONGODB_URI, optionsBuilder);

            MongoClient mongoClient = new MongoClient(clientUri);

            // 测试打印test库所有列表
            MongoDatabase mdb = mongoClient.getDatabase("test");
            for ( String name : mdb.listCollectionNames()){
                System.out.println(name);
            }

        } catch (Exception e) {
            System.out.println(e.toString());
        }
    }
}
0%