2016-07-21 3 views
1

Мои учетные данные отлично работают с Robomongo, но я не могу установить соединение с node.js
Я попытался подключиться, используя ssh2 и tunnel -ssh npm и не удалось оба раза.
-The Монго соединение не требует пароля
-The соединение SSH производится с помощью ЕГО ключаКак использовать Node.js для подключения туннелирования SSH к базе данных MongoDB

Это код, который я использовал с 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); 
     }); 

    }); 
}); 

Я не уверен, следует ли использовать обычную строку подключения MongoDB после установления вт nnel или ссылаться на базу данных как на localhost, такую ​​как
mongodb: // localhost: portnumber.
или
MongoDB: //databasepath.subpath.mongodbdns.com: 27000

Localhost дает мне разрешение отказано ошибка, последний дает мне таймаут

ответ

2

Как указано mscdex, ssh2 не является хорошим модулем для использования туннельного подключения ssh к базе данных. tunnel-ssh более уместен.

Вот варианты конфигурации, которые я использовал:

dstPort: порт подключения удаленной базы данных

локальный_порт: такой же, как dstPort, Это будет порт, который вы будете использовать для вашей локальной машины

имя пользователя: SSH имя пользователя,

хозяин: SSH адрес

DstHost: подключение к базе данных URL (... mongodbns.com),

PrivateKey: SSH ключ

Затем, когда ваш туннель подключен подключение через мангуст к вашему локальному хосту, таким как mondodb: // локальный: 27000 (используйте локальный_порт вы определили в локальный_порте)

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