mongodb之从 Go 连接到远程 Linux MongoDb(无身份验证)

cyq1162 阅读:20 2025-06-02 22:19:02 评论:0

登录 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 服务器绑定(bind)到 0.0.0.0 或用于连接机器的 IP 地址。

Side note: Make sure you have a brute force blocker like fail2ban or denyhosts installed, configured to protect MongoDB and tested if you do so.



如果上面的总和看起来太复杂了,你应该想 非常彻底了解您是否不应该使用托管的 MongoDB 服务,如 MongoDB Inc's AtlasmLab .

不过,您可以这样做:

$ 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"}}

Note

In case it was not clear by now: I strongly (!!!) advice against using an ssh tunnel. It makes creating a replicaset rather complicated and excludes sharding pretty much. Learn how to properly manage MongoDB. MongoDB University offers free courses, and they are pretty damn good.

You. Have. Been. Warned.


标签:linux
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号