mongodb - 从 Go 连接到远程 Linux MongoDb(无身份验证)
问题描述
登录 Linux 机器后,无需身份验证即可连接 MongoDB。
如何从 Go 代码连接到这样的 MongoDB 实例?我需要使用用户名和密码通过 SSH 连接到 Linux 机器,然后连接到 MongoDB。
尝试下面的代码,但它抛出:“没有可达的服务器”
在命令提示符下,我可以 ping Linux 机器 IP 地址,并且我的 IDE 也可以连接到互联网。
mongoDBDialInfo := &mgo.DialInfo{
Addrs: []string{"<LINUX_IP_ADDRESS>"},
Timeout: 60 * time.Second,
Database: "<MONGODB_DATABASE_NAME>",
Username: "<LINUX_USERNAME>",
Password: "<LINUX_PASSWORD>",
}
mongoSession, err := mgo.DialWithInfo(mongoDBDialInfo)
if err != nil {
log.Fatalf("CreateSession: %s\n", err)
}
解决方案
ssh 隧道是一种可行的措施,但有时保护服务的措施很棘手。
棘手的部分是隧道可能会崩溃,当这种情况发生时您无能为力,因为隧道是在您的应用程序之外创建的。
但是,对于 MongoDB,它还带来了一些相当讨厌的副作用:您需要大量设置设置和 DNS 来设置和运行副本,更不用说分片了。
如果您启用身份验证(这并不难)和 TLS 以及适当的安全措施,然后将您的 MongoDB 服务器绑定到 0.0.0.0 或您用于连接到机器的 IP 地址,那就更好了。
旁注:确保您安装了诸如fail2ban或denyhosts之类的强力阻止程序,配置为保护MongoDB并在您这样做时进行测试。
如果上面的总和看起来太复杂,您应该非常彻底地考虑您是否应该使用托管 MongoDB 服务,如MongoDB Inc 的 Atlas或mLab。
不过,您可以这样做:
$ ssh user@linuxhost -N -f -L 27017:127.0.0.1:27017
Password:
输入密码。该进程将进入后台,您可以通过以下方式检查它是否仍在运行
$ ps ax | grep ssh
这将打开到远程主机的 ssh 隧道,打开端口 27017(运行命令的机器上的第一个端口,并通过 ssh 连接将其隧道连接到端口 27017 上的 127.0.0.1(远程主机的 localhost 地址)) .
现在,您可以简单地设置&mgo.DialInfo{Addrs:[]string{"127.0.0.1:27017"}}
笔记
如果现在还不清楚:我强烈(!!!)建议不要使用 ssh 隧道。它使创建副本集变得相当复杂,并且几乎不包括分片。了解如何正确管理 MongoDB。 MongoDB 大学提供免费课程,而且非常好。
你。有。到过。警告。
推荐阅读
- python - 如何从带有下拉框的网站下载 CSV 数据?
- python-3.x - 提取字符串的一部分并将其附加到标签
- redirect - SSL DSN 隐藏重定向从 sub1.domain1.com 到 sub2.domain2.com
- python - 与模型组合的项目分隔符
- python - 我如何将 Aiohttp 与 PyPac 一起使用
- spring - 使用一个 Spring Cloud Gateway 监听不同的端口
- php - 如何识别 PHP 点击了哪个链接?
- telegram - 如果将该用户添加到联系人中,如何获取 Telegram 用户的个人资料名称?
- azure - 带有 API 管理访问令牌问题的 Azure Active Directory Oauth 2.0 客户端凭据流
- angular - 如何从文档编辑器 word 中的列表中拖放元素