Python pymongo-无法连接到EC2上运行的mongodb

Python pymongo-无法连接到EC2上运行的mongodb,python,mongodb,amazon-web-services,amazon-ec2,pymongo,Python,Mongodb,Amazon Web Services,Amazon Ec2,Pymongo,我正在连接EC2上的mongodb服务器。mongo集合需要身份验证才能连接 我尝试了所有的方法,但我发现了以下错误,似乎无法纠正 from pymongo import MongoClient mongo_username = "username" mongo_password = "password" ssh_user = "user" ssh_address = "ec2-**********.amazonaws.com" ssh_port = 22 private_key = "pat

我正在连接EC2上的mongodb服务器。mongo集合需要身份验证才能连接

我尝试了所有的方法,但我发现了以下错误,似乎无法纠正

from pymongo import MongoClient

mongo_username = "username"
mongo_password = "password"
ssh_user = "user"
ssh_address = "ec2-**********.amazonaws.com"
ssh_port = 22
private_key = "path/to/key/mykey.pem"

def connect_to_mongo():
   try:
        client = MongoClient("mongodb://"+mongo_username+":"+mongo_password+"@" + ssh_address, ssl = True, ssl_keyfile = private_key)
        db = client.myDB

        #Should 'admin' be there or 'myDB'? 'admin' at least get if(auth) passed, while 'myDB' doesn't 
        auth = client.admin.authenticate(mongo_username,mongo_password) 

        if(auth):
                print "MongoDB connection successful"
                col = db.myCollection.count()
        else:
                print "MongoDB authentication failure: Please check the username or password"

        client.close()

   except Exception as e:
        print "MongoDB connection failure: Please check the connection details"
        print e

if __name__ == "__main__":
    connect_to_mongo()
输出:

MongoDB connection successful
MongoDB connection failure: Please check the connection details
SSL handshake failed: EOF occurred in violation of protocol (_ssl.c:590)

默认情况下,EC2将关闭27017端口。如前所述创建内绑定规则。

我尝试了所有选项,最后成功了

client = MongoClient("mongodb://" + ssh_address+":27017") # No private key passing 
auth = client.myDB.authenticate(mongo_username,mongo_password) # Authenticate to myDB and not admin
db = client.myDB
因此,基本上我不需要传递私钥(在将ssh转移到EC2时需要传递私钥),因为端口已经为所有传入IP打开(我想这是一个重要的事实,我应该知道并在问题中发布)


此外,我还试图通过
管理数据库
进行身份验证,这是我不应该做的,因为我只能访问
myDB

我的一位合作开发人员正在通过Java接口访问mongodb,他能够做到这一点。你还认为这可能是原因吗?这个java实例是否在同一个VPC下运行?您是否从您的EC2专有网络之外访问?我不知道第一个问题的答案,但我正在从我的家庭网络访问EC2。默认情况下,amazon将在同一专有网络中启动的所有EC2实例相互连接,因此如果您的朋友从同一专有网络运行的实例访问mongodb,他将能够连接。如果您是从家中访问,则很可能不允许您的家庭网络作为入站网络。无论如何,你的答案留在安全组。我想我们只有一个EC2实例。我想我必须多读一些你提到的东西,否则我会继续问一些愚蠢的问题。