如何用pymongo连接远程mongodb

Posted

技术标签:

【中文标题】如何用pymongo连接远程mongodb【英文标题】:How to connect remote mongodb with pymongo 【发布时间】:2017-07-31 19:23:18 【问题描述】:

当我使用 MongoChef 连接远程 mongo 数据库时,我使用下一个参数:


服务器

服务器: 本地主机 端口: 27017

SSH 隧道

SSH 地址: 10.1.0.90

端口: 25

SSH 用户名: 用户名

SSH 密码: 密码


当我连接 Pymongo 时,我有下一个代码:

import pymongo

MONGO_HOST = "10.1.0.90"
MONGO_PORT = 25
MONGO_DB = "db_name"
MONGO_USER = "username"
MONGO_PASS = "password"

con = pymongo.MongoClient(MONGO_HOST, MONGO_PORT)
db = con[MONGO_DB]
db.authenticate(MONGO_USER, MONGO_PASS)

print(db)

但我有下一个错误:

pymongo.errors.ServerSelectionTimeoutError: 10.1.2.84:27017: [Errno 111] Connection refused

拜托,你能帮我解决这个问题吗?我做错了什么?

【问题讨论】:

连接 SSH > LOOPBACK = "localhost(127.0.0.1)" 如果限制所有外部 IP 访问,则无法连接 mongodb。 所以通过 SSH 连接并调用 python IDLE 应用您的连接命令并获取输出(连接到 localhost)。 感谢您的帮助! 理想情况下,您可以通过使 MongoDB 在服务器外部也可用来避免使用 ssh。这里有一种方法可以做到这一点:incredulosanonimos.blogspot.co.uk/2018/04/… 【参考方案1】:

适合我的解决方案。

from sshtunnel import SSHTunnelForwarder
import pymongo
import pprint

MONGO_HOST = "REMOTE_IP_ADDRESS"
MONGO_DB = "DATABASE_NAME"
MONGO_USER = "LOGIN"
MONGO_PASS = "PASSWORD"

server = SSHTunnelForwarder(
    MONGO_HOST,
    ssh_username=MONGO_USER,
    ssh_password=MONGO_PASS,
    remote_bind_address=('127.0.0.1', 27017)
)

server.start()

client = pymongo.MongoClient('127.0.0.1', server.local_bind_port) # server.local_bind_port is assigned local port
db = client[MONGO_DB]
pprint.pprint(db.collection_names())

server.stop()

【讨论】:

嗨@Володимир Назаренко,在使用上面的代码时,我能够连接到本地主机没有mongodb的远程mongodb。如果本地主机(从其中执行代码)有一个 mongodb,则脚本连接到本地 mongodb 而不是远程的。有什么想法吗? 嗨@DebashishDas,你能出示你的代码吗? 嗨@Володимир Назаренко,我没有使用 MongoClient('127.0.0.1', server.local_bind_port)。相反,我使用的是 MongoClient('127.0.0.1:27018')。我的错。【参考方案2】:

或者,你可以pip install ssh-pymongo:

from ssh_pymongo import MongoSession

session = MongoSession('10.1.0.90',
    port=25,
    user='USERNAME',
    password='PASSWORD',
    uri='mongodb://127.0.0.1:27017'
)

db = session.connection['DATABASE_NAME']

print(db)

session.stop()

包中的更多示例:

示例 1 -- 如果您的用户名相同,并且您已配置 ssh 密钥。

from ssh_pymongo import MongoSession

session = MongoSession('db.example.com')

db = session.connection['db-name']

示例 2 -- 如果您有一些自定义本地身份验证。

from ssh_pymongo import MongoSession

session = MongoSession('db.example.com',
    uri='mongodb://user:password@127.0.0.1/?authSource=admin&authMechanism=SCRAM-SHA-256')

db = session.connection['db-name']

示例 3 -- 如果您想使用不同的端口和密钥。

from ssh_pymongo import MongoSession

session = MongoSession(
    host='db.example.com',
    port=21,
    user='myuser',
    key='/home/myplace/.ssh/id_rsa2'
)

db = session.connection['db-name']

【讨论】:

【参考方案3】:

这帮助我在 python 中将 pymongo 与 mLab 数据库连接起来:

from pymongo import MongoClient

MONGO_HOST = "ds123456.mlab.com"
MONGO_PORT = 23456
MONGO_DB = "db name"
MONGO_USER = "Username"
MONGO_PASS = "password"
connection = MongoClient(MONGO_HOST, MONGO_PORT)
db = connection[MONGO_DB]
db.authenticate(MONGO_USER, MONGO_PASS)

【讨论】:

以上是关于如何用pymongo连接远程mongodb的主要内容,如果未能解决你的问题,请参考以下文章

如何用Mac远程桌面连接windows,不用装虚拟机

来自远程机器的 Pymongo 连接超时

如何用ODBC远程连接Oracle数据库

如何用Linux连接Windows的远程桌面

如何用XShell连接远程Linux服务器

如何用PLSQL Developer连接远程的ORACLE数据库