连接被拒绝连接到远程mongodb服务器

时间:2020-03-07 17:23:01

标签: linux mongodb debian

因此,我们已经在网络中积累了足够的应用程序,这些应用程序使用MongoDB证明构建专门用于MongoDB的专用服务器是合理的。不幸的是,我对mongodb还是很陌生(来自SQL / MySQL派生)。我遵循了有关为我的环境安装和配置mongodb的一些指南。没有一个是完美的,但是我想我已经接近了……我已经设法达到可以使用以下命令从本地服务器连接到db服务器的地步:

mongo -u user 127.0.0.1/admin

但是,我无法使用本地地址或使用其网络地址IE的远程计算机连接到服务器,

mongo -u user 192.168.24.102/admin

我尝试了启用和禁用身份验证的情况,并且尝试将bindIP设置为192.168.24.102和0.0.0.0,但没有任何帮助。认为这是防火墙问题,所以我完全禁用了防火墙...一样。没有爱...

那秘诀是什么?如何远程连接到MongoDB服务器?

一些注意事项:该服务器仅在本地网络上。某些时候会有一些NAT恶作剧将公共流量从远程应用程序服务器引导到它,但是只有特定的端口(发生这种情况时我们将不会使用27017),并且它将位于功能强大的防火墙设备后面,因此我不是像保护MongoDB本身一样,担心保护服务器安全。

1 个答案:

答案 0 :(得分:0)

此答案假设安装程序是Linux服务器完全处于远程状态,并且已经安装了MongoDB。

步骤:

1。通过SSH连接到远程服务器。

ssh <userName>@<server-IP-address>

2。启动Mongo Shell,并将用户添加到MongoDB。

添加管理员;

use admin
db.createUser(
  {
    user: "AdminSammy",
    pwd: "AdminSammy'sSecurePassword",
    roles: [ 
             {"userAdminAnyDatabase",
              "dbAdminAnyDatabase",
              "readWriteAnyDatabase"}
           ]
  }
)

然后添加一个或多个普通用户。将用户添加到特定的数据库。

use some_db

db.createUser({
    user: 'userName',
    pwd: 'secretPassword',
    roles: [{ role: 'readWrite', db:'some_db'}]
})

3。编辑您在mongod.conf目录中找到的MongoDB配置文件etc

sudo vim /etc/mongod.conf

向下滚动到#security:部分,然后添加以下行。确保取消对security:行的注释。

security:
  authorization: 'enabled'

启用授权后,只有使用密码验证的用户才能访问数据库。在这种情况下,这些就是上面step 2中添加的内容。

注意:也可以通过SSH使用Visual Studio代码来编辑mongo.conf文件。

4。将远程服务器的IP地址添加到mongod.conf文件中。

寻找net行,并添加托管此MongoDB安装的服务器的IP地址,例如178.45.55.88

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1, 178.45.55.88

5。打开服务器实例上的端口27017

这允许知道您的远程服务器IP地址的任何人从世界任何地方访问您的MongoDB服务器。这是拥有经过身份验证的用户的原因之一。更强大的安全性处理方式真的很重要!为此,请咨询MongoDB manual

使用ufw检查防火墙状态。

sudo ufw status

如果未激活,请激活它。

sudo ufw enable

然后

sudo ufw allow 27017

重要:您还需要允许端口22与远程服务器进行SSH通信。否则,您将被锁定在远程服务器之外。这里的假设是SSH使用端口22进行通信,这是默认设置。

sudo ufw allow 22

6。重新启动Mongo守护程序(mongod)

sudo systemctl restart mongod

7。使用Mongo Shell连接到远程Mongo服务器

您现在可以使用以下命令连接到远程MongoDB服务器。

mongo -u <user-name> -p <user-password> <remote-server-IP-address>:<mongo-server-port> 

您还可以通过身份验证连接到远程MongoDB服务器:

mongo -u <user-name> -p <user-password> <remote-server-IP-address>:<mongo-server-port> --authenticationDatabase <auth-db-name>

您还可以通过身份验证连接到特定的远程MongoDB数据库:

mongo -u <user-name> -p <user-password> <remote-server-IP-address>:<mongo-server-port>/<db-name> --authenticationDatabase <auth-db-name>

此刻,您无需使用some_db就可以从本地计算机在ssh数据库中进行读写。

重要:请考虑任何数据库的标准安全措施。本地安全实践应指导上述任何步骤的操作。