我正在尝试通过 ssh 隧道连接到 mongoclient。这是代码
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。 Pymongo 4.3.3 和 sshtunnel 0.4。抱歉,我在 ChatGPT 的帮助下花了 12 个小时,我们都不知道:/