一、环境
在Java中可以使用mongodb-driver
和com.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());
}
}
}