remota probar insertar example datos consulta configurar conexion conectar con python mongodb amazon-web-services amazon-ec2 pymongo

python - insertar - probar conexion a mongodb



pymongo-No se puede conectar a mongodb corriendo en EC2 (2)

Me estoy conectando a un servidor mongodb en EC2. Las colecciones mongo requieren autenticación para conectarse.

Intenté todo, pero recibo el siguiente error y parece que no puedo corregirlo.

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()

Salida:

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


EC2 cerrará el puerto 27017 por defecto. Cree la regla de encuadernación como se describe aquí y aquí .


Probé todas las opciones y finalmente funcionó.

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

Así que, básicamente, no necesito pasar una clave privada (que se requiere al hacer ssh en el EC2) ya que el puerto ya estaba abierto para todas las direcciones IP entrantes (supongo que este fue un hecho importante que debería haber conocido y publicado en la pregunta).

También estaba tratando de autenticar a través de la base de admin DB , lo que no debería haber hecho porque solo se me dio acceso a myDB .