gpt4 book ai didi

java - 如何使用 Java 驱动程序连接到 EC2 上的 MongoDB

转载 作者:太空宇宙 更新时间:2023-11-04 13:47:27 24 4
gpt4 key购买 nike

我按照教程http://www.jcraft.com/jsch/examples/PortForwardingL.java.html进行操作和 http://www.jcraft.com/jsch/examples/UserAuthPubKey.java.html我知道如何使用 pem 文件作为 key 通过 SSH 连接到 EC2 Ubuntu 实例。我可以在 IntelliJ 控制台以及 putty 中与 EC2 实例交互。但我想连接到 MongoDB 并使用描述的命令 here 。我尝试将新的 MongoClient 与 localhost 和 ec2 地址以及端口 22 和 27017 一起使用,但每个组合都失败了。

这是控制台的输出:

INFO: Cluster created with settings {hosts=[ec2Instance:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
com.mongodb.diagnostics.logging.JULLogger log
INFO: Exception in monitor thread while connecting to server ec2Instance:27017
com.mongodb.MongoSocketOpenException: Exception opening socket
at com.mongodb.connection.SocketStream.open(SocketStream.java:63)
at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:114)
at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:127)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:50)
at com.mongodb.connection.SocketStream.open(SocketStream.java:58)
... 3 more

这是我的代码:

import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.UserInfo;
import com.mongodb.MongoClient;


public class Connection {

private String pathToKey = "path to pem file";
private String user = "ubuntu";
private String hostname;

private int tunnelLocalPort = 22;
private int tunnelRemotePort = 27017;


public Connection(String hostname) {
this.hostname = hostname;
createConnection();
}


private void createConnection() {
JSch JavaSecureChannel = new JSch();

try {
Session session = JavaSecureChannel.getSession(user, hostname, tunnelLocalPort);
UserInfo userInfo = new OwnUserInfo();

JavaSecureChannel.addIdentity(pathToKey);
session.setUserInfo(userInfo);

session.connect();
session.setPortForwardingL(tunnelLocalPort, "host", tunnelRemotePort);

MongoClient client = new MongoClient("ec2Instance");

com.jcraft.jsch.Channel channel = session.openChannel("shell");
channel.setInputStream(System.in);
channel.setOutputStream(System.out);
channel.connect();
// these four lines connect to terminal and I can write commands into IntelliJ console

} catch (JSchException e) {
e.printStackTrace();
}
}
}

有人可以帮助我吗?

最佳答案

您可以在本地计算机上设置 SSH 隧道,以通过端口 22 进行连接,就像任何启用 SSH 的客户端一样,例如Robomongo 或 IntelliJ 可以。但这很麻烦。

除非您的网络安全明确禁止打开端口 27017 或任何运行 Mongo 的端口,否则只需在 EC2(安全组)中打开它即可。所有基本的数据库安全预防措施都适用,即您应该作为有限权限的应用程序而不是“root”级别用户进行连接,当然 Mongo 应该以 auth=true 启动。

关于java - 如何使用 Java 驱动程序连接到 EC2 上的 MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30688111/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com