远程权限认证解决办法 pymongo.errors.ServerSelectionTimeoutError: XX.:27017: [Errno 111] Connection refused

认证远程服务器的mongodb,一直报以下错误:

Traceback (most recent call last):
  File "run_cloudweb.py", line 109, in 
    operMongodb.ResourceThread.init_db(etc.config.MONGO_IP,int(etc.config.MONGO_PORT),etc.config.MONGO_DB,etc.config.MONGO_USER,etc.config.MONGO_PWD)
  File "/root/web/cloudweb_py3/operMongodb.py", line 281, in init_db
    db.authenticate(api_key,secret_key,mechanism='SCRAM-SHA-1')
  File "/usr/local/lib/python3.7/dist-packages/pymongo/database.py", line 1471, in authenticate
    connect=True)
  File "/usr/local/lib/python3.7/dist-packages/pymongo/mongo_client.py", line 751, in _cache_credentials
    writable_preferred_server_selector)
  File "/usr/local/lib/python3.7/dist-packages/pymongo/topology.py", line 231, in select_server
    address))
  File "/usr/local/lib/python3.7/dist-packages/pymongo/topology.py", line 189, in select_servers
    selector, server_timeout, address)
  File "/usr/local/lib/python3.7/dist-packages/pymongo/topology.py", line 205, in _select_servers_loop
    self._error_message(selector))
pymongo.errors.ServerSelectionTimeoutError: XX.XX.XX.XX:27017: [Errno 111] Connection refused

经过各种检查发现问题如下:

1. 远程服务器/etc/mongodb.conf配置里bind_ip修改, 默认是127.0.0.1,改成 0.0.0.0。或者是加上开放的ip(例如:180.77.22.12,80.77.22.13)

bind_ip = 0.0.0.0

然后重启 service mongodb  restart

2. 验证的时候加上"SCRAM-SHA-1"

from pymongo import MongoClient

#ip是mongo所在的ip, port默认是27017
con = MongoClient(ip, port)

#admin是mongo里的账号密码认证库
db = con['admin']

#mongo3.0.3以上版本,加入了SCRAM-SHA-1校验方式
db.authenticate(user, passwd, mechanism='SCRAM-SHA-1')

到这里就OK了

你可能感兴趣的:(mongo)