[英]How to connect to mongodb EC2 instance, using JAVA Driver + SSH pem key
[英]How to connect to MongoDB on EC2 using Java driver
我遵循了http://www.jcraft.com/jsch/examples/PortForwardingL.java.html和http://www.jcraft.com/jsch/examples/UserAuthPubKey.java.html的教程,我知道如何連接到EC2使用pem文件作為密鑰通過SSH的Ubuntu實例。 我可以在IntelliJ控制台以及膩子中與EC2實例進行交互。 但是我想連接到MongoDB並使用此處描述的命令。 我嘗試將新的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隧道以像任何啟用SSH的客戶端(例如Robomongo或IntelliJ)一樣通過端口22連接。 但這是一個麻煩。
除非您的網絡安全明確禁止打開端口27017或您在其上運行Mongo的任何端口,否則請在EC2(安全組)中將其打開。 所有基本的數據庫安全預防措施均適用,即您應該以受限權限的應用程序級別而非“ root”級別的用戶身份進行連接,並且當然,Mongo應該以auth = true開頭。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.