无法使用 SSH 隧道将 MongoDB Compass 连接到 AWS DocumentDB

Posted

技术标签:

【中文标题】无法使用 SSH 隧道将 MongoDB Compass 连接到 AWS DocumentDB【英文标题】:Unable to connect MongoDB Compass to AWS DocumentDB using SSH tunnel 【发布时间】:2021-05-03 03:13:36 【问题描述】:

我是 mongoDB 的新手,正在尝试为我的新项目设置工具。我的大部分基础设施都在 AWS 上运行,所以我更喜欢使用 AWS documentDB。我设法通过 mongo 客户端或 NodeJS 应用程序从 EC2 连接到 documentDB。但最好使用 MongoDB Compass 从我的 Windows 工作站管理 documentDB。

我们知道,我们无法将任何 mongo 客户端从 AWS 外部直接连接到 DocumentDB Connecting to an Amazon DocumentDB Cluster from Outside an Amazon VPC 所以我们需要通过 EC2 的 SSH 隧道。我尝试了很多选项,但仍然失败......下面很可能是 2 个选项:

选项 1:使用 MongoDB Compass SSH 隧道连接

错误:无法获取本地颁发者证书

RDS-COMBINED-CA-BUNDLE.PEMSSH Key 都已经提供了,哪一个买不到?

作为 SSH 端口上的红色突出显示,我还尝试在服务器上打开另一个 SSHD 端口并尝试使用第二个端口进行连接,但仍然失败。

选项 2:使用 Putty SSH 隧道连接

错误:主机名/IP 与证书的替代名称不匹配...

由于 MongoDB Compass 需要连接到 locathost 才能进入隧道,我仍然找不到提供 --sslAllowInvalidHostnames options 的方法。

那么,我能做些什么来解决这个问题?

MongoDB 指南针:1.25.0

【问题讨论】:

【参考方案1】:

我已经完成了指南针。 使用此公会成功建立到 AWS DocumentDB 的“robo3t”连接。

https://docs.aws.amazon.com/documentdb/latest/developerguide/robo3t.html

【讨论】:

【参考方案2】:

如果您直接在 MongoDB Compass 中编辑连接字符串,您可以设置在用户界面中可能无法访问的选项。

下面是一个经过调整的参数以在不使用 TLS 的情况下进行连接的示例:

mongodb://xxxx:yyyy@localhost:27017/?authSource=admin&connectTimeoutMS=10000&readPreference=primary&authMechanism=SCRAM-SHA-1&serverSelectionTimeoutMS=5000&appname=MongoDB%20Compass&ssl=false

【讨论】:

【参考方案3】:

截至 2022 年 1 月,MongoDB Compass 不支持连接构建器表单中的 sslInvalidHostNameAllowed=true,这是您缺少的参数,以便在 ssh 隧道连接到数据库本身的同一 VPC 内的机器时连接到 AWS DocumentDB。

我使用了 Studio 3T,它运行良好。您可以自己创建连接字符串或尝试其他 GUI。

【讨论】:

【参考方案4】:

对于主机名,您使用的是 DocumentDB 端点吗?在一个屏幕截图中,我看到您正在使用 localhost。

我已成功连接选项 1。

【讨论】:

如果提供“DocumentDB”端点作为主机名,将会出现“连接超时”。因为在 Option2 中,MongoDB Compass 需要连接到 localhost:27018 才能进入 Putty SSH 隧道。我已经在 Putty SSH 隧道中提供了 DocumentDB 端点作为目的地。【参考方案5】:

解决方法是使用 SSH 隧道(端口转发)建立连接,以便 SSH 隧道在您的本地系统上打开一个端口,该端口通过隧道另一端的另一个端口连接。

使用以下命令在终端上建立隧道,稍后您可以使用此通道/连接使用 MongoDB Compass 连接 MongoDB。

例如:

ssh user@aws-ec2-ip-address -L 35356:127.0.0.1:27017 -N    
其中 -L 作为本地监听端 端口 35356 正在侦听 localhost(在本例中为您的 EC2),并通过端口转发到远程服务器上的端口 27017。

注意 - 在 .ssh/config 中添加身份文件

前 - 在 Mac 上

Host XXXXXXX
  HostName 52.xx.xx.xx
  User ubuntu
  IdentityFile ./path/prod.pem

【讨论】:

以上是关于无法使用 SSH 隧道将 MongoDB Compass 连接到 AWS DocumentDB的主要内容,如果未能解决你的问题,请参考以下文章

使用隧道 ssh 通过 nodeJS 中的 mongoose 通过 ssh 连接到远程服务器 mongoDB

如何使用代理跳转(堡垒主机)通过 ssh 隧道连接到 mongodb 服务器

配置SSH隧道访问Ubuntu服务器上的MongoDB

如何设置 SSH 隧道以连接到位于 AWS EC2 服务器上的 ElasticSearch 和 MongoDB?

在 Java 中通过 SSH 隧道连接到 Mongo 数据库

mysqli 无法使用 ssh 隧道