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

时间:2016-02-04 16:14:00

标签: 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 = "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)

2 个答案:

答案 0 :(得分:2)

EC2默认会关闭27017端口。按照herehere所述创建入站规则。

答案 1 :(得分:1)

我尝试了所有选项,最后还是有效。

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打开了端口(我想这是一个重要的事实,我应该知道并张贴在问题中。)

此外,我尝试通过admin DB进行身份验证,我不应该这样做,因为我只能访问myDB