Как связать удаленный mongodb с pymongo

Когда я использую MongoChef для подключения к удаленной базе данных Монго, я использую следующие параметры:


сервер

  • Сервер: localhost
  • Порт: 27017

SSH Tunnel

  • 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

Пожалуйста, не могли бы вы помочь мне с этой проблемой? Что я должен делать не так?

2 ответа

Решение

Решение, которое работает для меня.

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

Или вы могли бы просто pip install ssh-pymongo:

from ssh_pymongo import MongoSession

session = MongoSession(
    host='10.1.0.90',
    port='25',
    user='USERNAME',
    password='PASSWORD'
)

db = session.connection['DATABASE_NAME']

print(db)

Еще примеры из пакета:

Пример 1 - Если ваше имя пользователя такое же, и вы настроили ключи ssh.

from ssh_pymongo import MongoSession

session = MongoSession('db.example.com')
# session.connection.database_names()

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

session.stop()
# session.start()

Пример 2 - Если у вас есть хост, пользователь и пароль машины MongoDB.

session = MongoSession(
    host='db.example.com',
    user='myuser',
    password='mypassword',
)
# ...
session.stop()

Пример 3 - Если вы хотите использовать разные порты и ключи.

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

Это помогло мне соединить pymongo с базой данных mLab в python:

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)
Другие вопросы по тегам