如何通过mongoose和ssh隧道连接

Sec*_*mon 2 ssh mongoose mongodb node.js

我按如下方式设置了我的mongod.conf,因此它只允许localhost连接.

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
Run Code Online (Sandbox Code Playgroud)

然后我希望我的网站ssh到mongodb,所以端口必须转换为localhost.

但是,如何将其与mongoose的连接功能集成?

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

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

ssh -L 4321:localhost:27017 -i ~/.ssh/ssh_key user@ip-adress
Run Code Online (Sandbox Code Playgroud)

这应该通过端口4321 ssh我到localhost吧?所以我想我在nodejs mongoose的connect函数中需要这样的东西.我试图在mongodb安全教程上阅读这个,但我根本无法将他们的指令链接到nodejs.有经验的人吗?

小智 6

你快到了.设置独立于节点的隧道:

ssh -Nf -p [db_server_ssh_port] [mongo_user]@[mongo_domain] -L \
[local_db_port]:localhost:[remote_db_port]
Run Code Online (Sandbox Code Playgroud)

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

mongoose.connect(
  "mongodb://localhost:[local_db_port]/[db_name]",
  {"pass":"[db_pwd]"}
)
Run Code Online (Sandbox Code Playgroud)

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

在node-mysql中使用SSH隧道连接到MySQL