如何使用Node.jsbuild立到MongoDB数据库的SSH隧道连接

我的凭据与Robomongo完美协作,但我无法与node.jsbuild立连接
我试图使用ssh2和tunnel-ssh npm模块进行连接,并且两次都失败。
– mongo连接不需要密码
-sh连接是用pem键进行的

这是我使用ssh2模块的代码,我可以正确build立隧道,但是mongo连接失败

var Client = require('ssh2').Client; var conn = new Client(); conn.on('ready', function() { console.log('Client :: ready'); //mongo connection mongoose.connect('mongodb://localhost:27000/'); var db = mongoose.connection; db.on('error', console.error.bind(console, 'connection error:')); db.once('open', function() { console.log("database connection established"); var users = db.collection('user'); var getallUsers = function (date, callback){ users.find({}).toArray(function(err,data){ callback(data); }) }; getallUsers(null, function (data){ console.log('data :'+ data); }); }); //end of mongo connection }).connect({ host: '**.**.**.**.**', port: 22, username: 'ec2-user', privateKey: key }); 

和代码隧道SSH

 var config = { dstPort: 27000, user: 'ec2-user', host: '**.**.**.**.**', privateKey: key }; var server = tunnel(config, function (error, server) { if(error){ console.log("SSH connection error: " + error); } console.log('database connection initalizing'); mongoose.connect('mongodb://localhost:27000/'); var db = mongoose.connection; db.on('error', console.error.bind(console, 'connection error:')); db.once('open', function() { console.log("database connection established"); var users = db.collection('user'); var getallUsers = function (date, callback){ users.find({}).toArray(function(err,data){ callback(data); }) }; getallUsers(null, function (data){ console.log(data); }); }); }); 

我不确定在build立隧道之后是否使用常规的MongoDB连接string,或者将数据库引用为localhost,例如
MongoDB的://本地主机:端口号。
要么
MongoDB的://databasepath.subpath.mongodbdns.com:27000

本地主机给我一个权限被拒绝的错误,后者给我一个超时

正如mscdex提到的,ssh2不是一个很好的模块,可以用来build立到数据库的ssh隧道连接。 tunnel-ssh更合适。

这里是我使用的configuration选项:

dstPort:远程数据库连接端口

localPort:与dstPort相同,它将是您将用于本地机器的端口

用户名:SSH用户名,

主机:SSH地址

dstHost:数据库连接url(… mongodbns.com),

privateKey:SSH密钥

然后,一旦你的隧道连接通过mongoose连接到您的本地主机,如mondodb:// localhost:27000(使用localport在localPort中定义)

 var server = tunnel(config, function (error, server) { if(error){ console.log("SSH connection error: " + error); } mongoose.connect('mongodb://localhost:27000/'); //...rest of mongoose connection } 

由于mongoose不支持传入一个stream作为底层连接,你将不得不监听本地端口(例如27000),并通过ssh连接将传入的连接转发到该端口。

幸运的是,存在为ssh2构build的第三方模块,这些模块为您提供了这种function,例如tunnel-ssh 。 尝试使用其中之一。