python - 使用pymongo连接到aws时出现ServerSelectionTimeoutError

标签 python mongodb amazon-web-services ssl pymongo

我正在尝试使用 key 文件连接到托管在 AWS 实例上的 MongoDB。我能够通过 ssh 进入实例并毫无问题地连接到数据库。当我尝试使用 pymongo 从远程位置连接到数据库时,我收到此错误: ServerSelectionTimeoutError:SSL 握手失败:EOF 发生在违反协议(protocol)的情况下

端口 27017 已打开,源设置为 0.0.0.0/0。

from pymongo import MongoClient

client = MongoClient('mongodb://ec2-123-45-678-910.compute-1.amazonaws.com', 
                     27017, 
                     ssl=True, 
                     ssl_keyfile='/path_to/mykey.pem')

db = client.test
coll = db.foo
coll.insert_many(records)

ServerSelectionTimeoutError: SSL handshake failed: EOF occurred in violation of protocol (_ssl.c:645)

This问题与我的几乎相同,但错误不同,那里发布的解决方案不适用于我的问题。

这里的地址和 key 已经更改,我已经在这个问题上兜圈子了几个小时,但没有成功,任何帮助将不胜感激。

最佳答案

此问题可能由以下问题引起:

  1. pymongo 版本(建议使用 3.3.0,对我有用)

  2. 这可能是 DNS 问题等,实际上您可以使用以下方法检查 DNS 问题:

telnet xx.xx.xx.xx 端口

  1. 可能是防火墙问题

  2. 可能是 ssl key 的问题。尝试以下方法进行测试:

    import os
    
    import pymongo
    
    import ssl
    
    URL="url:port/db?ssl=true"
    
    client = pymongo.MongoClient(URL, ssl_cert_reqs=ssl.CERT_NONE)
    
    db = client.get_default_database()
    
    print db
    
    print db.collection_names()

关于python - 使用pymongo连接到aws时出现ServerSelectionTimeoutError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39927024/

相关文章:

python - Django Shell 没有名为设置的模块

python - Tensorflow 将预测值转换为二进制

python - 需要在图表外使用 matplotlib 散点标记,在条形图的标签中

laravel - 使用Nginx HHVM和MongoDB配置Laradock

mongodb - 无法从 AWS EC2 实例连接到 Mlab.com 数据库

python - contextlib.nested 中的怪癖解决方法

MongoDB/Mongoose 对单个文档的原子读写

java - 如何使用java查询mongodb “start with”

asp.net - AWS SNSClient发布请求的超时错误

amazon-web-services - 如何删除AWS EC2实例?它不断地再次回来