我有一个 Lightsail AWS 实例启动并运行在 MEAN 堆栈中。我有一个在不同的网络上运行的现有 MEAN 堆栈。目前,节点服务器.js连接到 mongo 位的本地主机(在同一台机器上),我要做的就是将本地主机替换为与我的 AWS 远程服务器上运行的 mongo 的连接。
我理解,出于安全原因,最好通过ssh隧道传输此连接,我认为我很熟悉。
到目前为止,我所做的是:
在托管节点服务器的机器(远程到数据库)上的控制台中,我运行了:
ssh -L 8181:127.0.0.1:80 -i ~/LightsailDefaultPrivateKey-eu-west-2.pem bitnami@31.16.56.125 -N
然后,我可以使用localhost:8181/rockmongo从本地机器浏览到RockMongo UI。耶。
如果我然后运行以下命令:
ssh -L 8181:127.0.0.1:27017 -i ~/LightsailDefaultPrivateKey-eu-west-2.pem bitnami@31.16.56.125 -N
(27017是蒙戈港)
然后尝试使用以下方法从我的远程计算机访问数据库:
mongo --username XXXXXX --password XXXXXX 31.16.56.125:8181/testdata
我收到以下错误:
~] 2017-12-28T22:11:09.791+0000 错误:无法连接到服务器 31.16.56.125:8181 (31.16.56.125),src/mongo/shell/mongo 的连接尝试失败.js:148 异常:连接失败
我做错了吗? 即隧道仅用于 http 连接而不是 mongo 命令行使用?我是否需要以其他方式测试连接?
我为此到处搜索,运气不佳(很多 AWS 文档建议在防火墙上打一个洞 - 这再也做不到了!
好的,我已经(部分)解决了这个问题,有一些问题。
1) mongo 客户端是 2.6,在 AWS 上运行的 mongo 是 3.4。升级它解决了一些问题 - 因为我收到了更有意义的错误消息。
我确实遇到问题的一件事是 apt-get 似乎执行了更新,但发出 mongo 命令时报告的版本仍然是 2.6。
为了解决这个问题,我不得不运行sudo apt-get purge mongodb-org*
(注意星号)。然后执行更新...。如果您需要执行此操作,请按照以下说明操作: https://docs.mongodb.com/v3.2/tutorial/install-mongodb-on-ubuntu/
2) 此命令
mongo --username XXXXXX --password XXXXXX 31.16.56.125:8181/testdata
无法正常工作,因为我省略了"管理员"并且未指定本地主机!
但
mongo admin --username XXXXXX --password XXXXXX localhost:8181/testdata
也不起作用,并给出以下输出。
2018-01-03T22:00:42.380+0000 W NETWORK [thread1] Failed to connect to 127.0.0.1:27017, in(checking socket for error after poll), reason: errno:111 Connection refused
2018-01-03T22:00:42.380+0000 E QUERY [thread1] Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed :
connect@src/mongo/shell/mongo.js:229:14
@(connect):1:6
我唯一可以开始工作的命令是:
mongo admin --username XXXXXX --password XXXXXX --port 8181
默认主机是 localhost,因此在这种情况下它使用隧道,这也将只连接到测试数据库,然后您可以从那里进行管理。
我还没有深入了解的是 host:port/db 的规范,根据运行mongo --help
的输出作为参数
usage: mongo [options] [db address] [file names (ending in .js)]
db address can be:
foo foo database on local machine
192.169.0.5/foo foo database on 192.168.0.5 machine
192.169.0.5:9999/foo foo database on 192.168.0.5 machine on port 9999