为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
侃侃无极 2023-07-31 14:51:06
登录 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)    }
查看完整描述

1 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

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(远程主机的本地主机地址) 。

现在,您只需设置&mgo.DialInfo{Addrs:[]string{"127.0.0.1:27017"}}

查看完整回答
反对 回复 2023-07-31
  • 1 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信