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