node.js - 如何通过 mongoose 和 ssh 隧道连接

标签 node.js mongodb ssh mongoose

我已按如下方式设置我的 mongod.conf,因此它只允许本地主机连接。

storage:
  dbPath: /var/lib/mongodb
  journal:
    enabled: true

systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

net:
  port: 27017
  bindIp: 127.0.0.1

然后我希望我的站点通过 ssh 连接到 mongodb,因此必须将端口转换为本地主机。

但是我怎样才能将它与 mongoose 的连接功能集成呢?

mongoose.connect(configDB.url, function(err){
  if (err){
    console.log('Error connecting to mongodb: ' + err)
  }
});

我找到了以下命令,但我不确定这是否是我需要的:

ssh -L 4321:localhost:27017 -i ~/.ssh/ssh_key user@ip-adress

这应该通过端口 4321 将我 SSH 到本地主机,对吗?所以我想我在 nodejs mongoose 的连接函数中需要这样的东西。我试图在 mongodb 安全教程上阅读此内容,但我根本无法将他们的说明链接到 nodejs。谁有这方面的经验?

最佳答案

你快到了。设置独立于 Node 的隧道:

ssh -Nf -p [db_server_ssh_port] [mongo_user]@[mongo_domain] -L \
[local_db_port]:localhost:[remote_db_port]

然后在 Node 内,使用 [local_db_port] 连接到 mongo:

mongoose.connect(
  "mongodb://localhost:[local_db_port]/[db_name]",
  {"pass":"[db_pwd]"}
)

发送到 Web 服务器上 [local_db_port] 的所有流量都将通过隧道发送到 [mongo_domain] 上的端口 [remote_db_port]。以下帖子提供了更多信息。它连接的是MySQL数据库,但原理是一样的。

Connect to MySQL using SSH Tunneling in node-mysql

关于node.js - 如何通过 mongoose 和 ssh 隧道连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36031435/

相关文章:

MongoDB 服务未启动。错误号 :13 Permission denied

silverlight - 兼容Silverlight的Telnet/SSH库

node.js - 在sequelize中定义触发器 - NodeJS

javascript - Discord.js 检查 guild 是否有具有特定名称的 channel ,如果有,则将该 channel id 存储到变量中

mysql - 服务器版本,以便在第 1 行\'\' testusername\'\' 附近使用正确的语法' }

Windows - 我不使用 MongoDb 但它在 Windows 上使用 3gb

javascript - future 有必要在 Node 中运行一系列异步函数吗?

mongodb - Graylog容器无法连接到MongoDB容器

vim - 通过 ssh 进行编辑时,vim 中的多字节字符显示不稳定

ssh - 如何在 AWX 上安全地使用 ssh 私钥?