Pymongo.errors.ServerSelectionTimeoutError: Ошибка рукопожатия SSL: localhost: 27017: [WinError 10054]

Я пытаюсь подключиться к mongoclient через ssh-туннель. Вот код

import pymongo
from sshtunnel import SSHTunnelForwarder

with open("config.json") as f:
    config = json.load(f)

config_params = config["dev_db"]

# SSH server credentials
SSH_HOST = config_params['host_name']
SSH_PORT = 22
SSH_USER = config_params['host_username']
SSH_KEY = config_params['private_key']

# MongoDB server credentials
MONGO_HOST = config_params["db_uri"]
MONGO_PORT = 27017
params = config_params['params']

# Create an SSH tunnel
with SSHTunnelForwarder(
    (SSH_HOST, SSH_PORT),
    ssh_username=SSH_USER,
    ssh_pkey=SSH_KEY,
    remote_bind_address=(MONGO_HOST, MONGO_PORT),
    local_bind_address=('localhost', MONGO_PORT),
) as server:

    # Connect to MongoDB
    client = pymongo.MongoClient(
        'localhost',
        server.local_bind_port,
        username = params['username'],
        password=params['password'],
        tlsAllowInvalidCertificates=True,
        tls=True,
        tlsCAFile=params['tlsCAFile'],
        retryWrites=False
    )
    print(client)
    print(client.list_database_names())

Учетные данные действительны на 100%. Я могу подключиться к ним через Mongo Atlas, и все работает. Я также проверил, доступны ли pems из кода, и они действительно есть.

Python 3.7, но я пробовал и 3.11. Пимонго 4.3.3 и sshtunnel 0.4. Извините, я трачу на это может быть 12 часов с помощью ChatGPT, и у нас обоих нет идей :/

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После двух дней и некоторого случайного дерьма я прокомментировал

with SSHTunnelForwarder(
   (SSH_HOST, SSH_PORT),
   ssh_username=SSH_USER,
   ssh_pkey=SSH_KEY,
   remote_bind_address=(MONGO_HOST, MONGO_PORT),
   #local_bind_address=('localhost', MONGO_PORT),
) as server:

эта линия, и это сработало! Я предполагаю, что он столкнулся с некоторыми конфликтами во время привязки порта. Спасибо всем!

Другие вопросы по теме