如何通过mongoose和ssh隧道连接

时间:2016-03-16 09:26:10

标签: node.js mongodb ssh mongoose

我已按如下方式设置了我的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

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

但是,如何将其与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转发给localhost吧?所以我想我在nodejs mongoose的connect函数中需要这样的东西。我曾尝试在mongodb安全教程上阅读此内容,但我根本无法将其指令链接到nodejs。有这方面经验的人吗?

2 个答案:

答案 0 :(得分:5)

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

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

然后在节点内,使用[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

答案 1 :(得分:0)

独立于节点设置隧道:

ssh -L [your given port]:localhost:27017 [username of ssh]@[ip address of ssh matchine] -f -N

之后你已经为mongo数据库包含了你的给定端口。 在nodejs中你必须像这样设置mongoose连接

'mongodb://localhost:[your given port number]/[database name]'

享受它