2016-07-21 21 views
1

Meine Anmeldeinformationen funktionieren perfekt mit Robomongo, aber ich kann die Verbindung mit node.js nicht herstellen
Ich habe versucht, die Verbindung mit ssh2 und Tunnel zu machen -ssh npm-Modul und beide Male fehlgeschlagen.
-Die Mongo Verbindung erfordert kein Passwort
-Der SSH-Verbindung mit einem pem SchlüsselVerwendung von Node.js, um eine SSH-Tunnelverbindung zu einer MongoDB-Datenbank herzustellen

Dieser gemacht wird, ist der Code, den ich mit SSH2-Modul verwendet habe, kann ich den Tunnel richtig etablieren, aber die Mongo Verbindung schlägt fehl

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

und der Code der Tunnel-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); 
     }); 

    }); 
}); 

ich bin nicht sicher, ob die regelmäßige Zeichenfolge MongoDB-Verbindung zu verwenden, nachdem die tu Gründung nnel oder Verweis auf die Datenbank als localhost wie
mongodb: // localhost: portnumber.
oder
mongodb: //databasepath.subpath.mongodbdns.com: 27000

Lokaler Host mir eine Erlaubnis verweigert Fehler gibt, gibt letztere mir eine Auszeit

Antwort

2

Als mscdex erwähnt ssh2 ist kein gutes Modul zu verwenden, um eine SSH-Tunnelverbindung zu einer Datenbank zu machen. tunnel-ssh ist besser geeignet.

Hier sind die Konfigurationsoptionen die ich verwendet habe:

dstport: Remote-Datenbankverbindungsanschluss

localport: wie dstport, Es wird der Hafen, die Sie für Ihre lokalen Rechner verwenden werden

Benutzername: SSH Benutzername,

host: SSH-Adresse

DstHost: Datenbank-Verbindung url (... mongodbns.com),

privateKey: SSH-Schlüssel

Dann, wenn Ihr Tunnel ist über Mungo zu Ihrem localhost wie mondodb verbinden: // localhost: 27000 (verwenden Sie die LokalerAnschluss Sie in localport definiert)

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

Da mongoose nicht in einem Strom vorbei an unterstützt Als zugrunde liegende Verbindung müssen Sie einen lokalen Port (z. B. 27000) abhören und eingehende Verbindungen über die ssh-Verbindung an diesen Port weiterleiten.

Glücklicherweise gibt es Drittanbietermodule, die auf ssh2 aufbauen, die diese Art von Funktionalität für Sie bereitstellen, z. B. tunnel-ssh. Versuchen Sie es mit einem davon.

+0

Dank für die antwort, die ich eine menge zeit auf tunnel-ssh verbracht habe, ich konnte es nicht erreichen, mein code für tunnel-ssh ist oben. – user3382714

+0

hast du 'username' anstelle von' user' in deinem config-Objekt versucht? – mscdex