Node.js使用Mongoose SSH隧道到MongoDB

我有两个Mongo DB。 一个用于我的开发环境,一个用于从我的Robomongo设置中看到的生产:

两个Mongo DB

生产数据库是SSH隧道到我的数字海洋虚拟服务器,如图所示(具体情况已明显改变)。 连接到/从我的生产网站时,此设置工作正常:

SSH隧道设置

我现在正在做一个不同的/相关的项目,并且需要将我的本地机器连接到我的生产数据库,所以我想我需要使用类似tunnel-ssh的东西来完成它。 我已经按照这个答案作为例子,但我要么Error: (SSH) Channel open failure: open failed或连接到我的Dev数据库(当我使用27017作为我的dstHost / dstPort /本地端口)。 我必须考虑这个错误,否则我对自己的configuration感到厌倦。 无可否认,我是一个完全的Mongo / Mongoose新手,所以两者同样可行。 有什么build议?

 var fs = require("fs"); var mongoose = require('mongoose'); var tunnel = require('tunnel-ssh'); //===== db connection ===== var config = { username:'my.username', host:'my.ip.address', agent : process.env.SSH_AUTH_SOCK, privateKey:require('fs').readFileSync('/Users/myusername/.ssh/id_rsa'), port:22, dstHost:'mongodb://localhost:27000/mydbname', dstPort:27000, localHost:'127.0.0.1', password:'mypassword', localPort: 27000 }; var server = tunnel(config, function (error, server) { if(error){ console.log("SSH connection error: " + error); } mongoose.connect('mongodb://localhost:27000/mydbname'); var db = mongoose.connection; db.on('error', console.error.bind(console, 'DB connection error:')); db.once('open', function() { // we're connected! console.log("DB connection successful"); // console.log(server); }); }); 

提前致谢!

dstHost需要是主机名/ IP,而不是MongoDB连接string。 在这种特殊情况下,你可以在这种情况下实际上省略dstHostlocalHostlocalPort ,因为它们已经默认了你提供的值。

最后的工作configuration供将来参考。 感谢mscdex – 我只需要提供正确的 dstPort并将其包含在我的Mongo URIstring(27017)中。 很简单。 希望这可以帮助。

 var config = { username:'myusername', host:'my.ip.address', agent : process.env.SSH_AUTH_SOCK, privateKey:require('fs').readFileSync('/Users/myusername/.ssh/id_rsa'), port:22, dstPort:27017, password:'mypassword' }; var server = tunnel(config, function (error, server) { if(error){ console.log("SSH connection error: " + error); } mongoose.connect('mongodb://localhost:27017/mydbname'); var db = mongoose.connection; db.on('error', console.error.bind(console, 'DB connection error:')); db.once('open', function() { // we're connected! console.log("DB connection successful"); }); });