2016-07-21 92 views
1

我的凭据可以与Robomongo完美配合,但我无法与node.js建立连接
我试图使用ssh2和tunnel建立连接-ssh npm模块并且两次都失败。
-The蒙戈连接不需要密码
-The ssh连接与PEM关键如何使用Node.js建立到MongoDB数据库的SSH隧道连接

这是我所使用SSH2模块使用的代码所做的,我可以正确建立隧道,但蒙戈连接失败

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); 
     }); 

    }); 
}); 

我不知道是否要建立TU后使用常规的MongoDB连接字符串或者将数据库称为本地主机,如
mongodb:// localhost:portnumber。

的MongoDB://databasepath.subpath.mongodbdns.com:27000

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

回答

2

由于mscdex提到ssh2不是一个很好的模块来用来建立到数据库的ssh隧道连接。 tunnel-ssh更合适。

下面是我用的配置选项:

dstPort:远程数据库的连接端口

将localPort:同dstPort,这将是你会使用本地计算机的端口

用户名:SSH用户名,

主持人:SSH地址

dstHost:数据库连接的URL(... mongodbns.com),

专用密钥:SSH密钥

然后,一旦你的隧道连接通过猫鼬连接到localhost如mondodb://本地主机: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 
} 
0

由于mongoose不支持将在流用作底层连接,你必须监听本地端口(例如27000)并通过ssh连接将传入连接转发到该端口。

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

+0

谢谢我在tunnel-ssh上花了很多时间的响应,我无法连接,我的tunnel-ssh代码位于上面。 – user3382714

+0

您是否在配置对象中尝试了'username'而不是'user'? – mscdex

相关问题