2016-07-21 93 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

相關問題