sshtunnel.BaseSSHTunnelForwarder 无法建立与 SSH 网关的会话

Kan*_*nna 9 django mongodb python-3.x

我正在使用 django 和 mysql 数据库来开发 api。现在我有了一个新的需求,用django连接mongodb数据库。我已经使用了以下解决方案

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]
Run Code Online (Sandbox Code Playgroud)

现在我正在关注

sshtunnel.BaseSSHTunnelForwarderError:无法建立与 SSH 网关的会话

在 django poject 中连接 mongodb 是好方法吗?

Ste*_*ina 3

我认为这与您连接它的方式无关。该消息意味着您的 SSH 配置中的某些内容不正确。

SSHTunnelForwarder使用 SSH 主机、端口、用户和密码进行实例化,因为您首先需要访问可以连接到 Mongo 主机的主机(运行 sshd 的主机)。我也不知道你在哪里传递密钥进行身份验证。确保<your-key-instance-here>根据您拥有的密钥类型进行相应定义(例如,对于 RSA 类型密钥,使用paramiko: paramiko.RSAKey.from_private_key_file('/path/to/your/ssh/key/file'))。之后,在客户端中您需要指定 Mongo 用户和密码:

@contextmanager
def _tunnel():
    with SSHTunnelForwarder((ssh_host, 22),
                             ssh_username=SSH_USER,
                             ssh_pkey=<your-key-instance-here>,
                             remote_bind_address=(MONGO_HOST, MONGO_PORT)
                            ) as tunneled_conn:
        yield pymongo.MongoClient('mongodb://%s:%s@127.0.0.1' % (MONGO_USR, MONGO_PWD),
                                  port=tunneled_conn.local_bind_port
                                  )
Run Code Online (Sandbox Code Playgroud)

然后在您的代码中将其用作


with _tunnel() as mongo_client:
    ...
Run Code Online (Sandbox Code Playgroud)