我正在尝试通过 SSH 端口转发连接到 Amazon DocumentDB 集群,如此处所述。我可以使用这个命令连接...
mongosh --host localhost:27017 --ssl --sslAllowInvalidHostnames --sslCAFile rds-combined-ca-bundle.pem --username REDACTED --password REDACTED
...但不是这个命令...
mongosh mongodb://REDACTED:REDACTED@localhost:27017/?ssl=true&ssl_ca_certs=rds-combined-ca-bundle.pem
它失败并显示错误消息“无法获取本地颁发者证书”。至少一个问题是我无法找到任何有关如何将
--sslAllowInvalidHostnames
选项转换为连接字符串格式的文档。我发现了 this,但是添加 &sslVerifyCertificate=false
并没有改变任何东西,所以我在这里可能做错了其他事情。
我(有点)想通了。我从未通过 mongosh 使用连接字符串,但是当使用它在代码中连接时(这是我的最终目标),您必须采取特定于语言的步骤来安装 CA 证书。然后您可以使用这样的连接字符串连接您的应用程序。
mongodb://REDACTED:REDACTED@localhost:27017?tls=true&tlsInsecure=true
与 DocumentDB 建立编程连接
创建隧道可以通过多种方法来实现,最安全的方法是使用专用工具。 Putty 就是这样的工具之一,它有助于建立隧道过程。
要使用 Putty 创建隧道,请按照以下步骤操作:
第1步:安装Putty(版本0.77)。从以下链接下载 Putty:Putty 0.77 下载
第 2 步:打开 Putty 并根据您的隧道要求进行配置。
在“会话”选项卡中,我们需要输入主机名和端口。主机名:3.87.129.28,端口:22。
第 3 步:导航到连接选项卡并设置连接详细信息和隧道配置。
在“Auth”选项卡中,您需要指定私钥文件 (.ppk) 的路径,以便建立与隧道服务器的连接。
在“隧道”选项卡中,我们需要输入源端口和名称。
源端口:8080
名称:docdb-2024-03-18-07-00-04.cluster-cp64sl7qubb3.us-east-1.docdb.amazonaws.com:27017
然后点击添加按钮设置转发端口,
第5步:单击“打开”按钮访问终端并以用户“ubuntu”登录。
第 6 步:通过在本地服务器上执行以下命令来验证隧道连接:
命令:netstat –a
我们可以看到当地的回应
pip 安装 pymongo
pip 安装路径库
第1步:从以下URL下载SSL证书:SSL证书下载
第2步:在下面的示例代码中指定证书。
注意:我们需要提及的 SSL 证书的完整路径。
import pymongo
导入系统
导入操作系统
导入路径库
mongo_client = pymongo.MongoClient(
host=f"mongodb://XXXXX:YYYYYY@localhost:8080/?",
tlsCAFile=os.fspath(pathlib.Path(__file__).parent.parent.parent / 'E:\\Python Scrips\\DocumentDB\\global-bundle.pem'),
tls=True,
authMechanism="SCRAM-SHA-1",
tlsAllowInvalidHostnames=True,
directConnection=True,
retryWrites=False,
)
##指定要使用的数据库
db = mongo_client.sample_database
##指定要使用的集合
col = db.sample_collection
##插入单个文档
col.insert_one({'hello':'Amazon DocumentDB_jagadeesh_cloud_team_test_record'})
##找到之前写的文档
x = col.find_one({'hello':'Amazon DocumentDB_jagadeesh_cloud_team_test_record'})
打印(x)
##将结果打印到屏幕上
database_names = mongo_client.list_database_names()
对于database_names中的db_name:
print(db_name)
##关闭连接
mongo_client.close()