2016-12-01 7 views
2

私は2つのモンゴDBを持っています。私のdevの環境、私のRobomongoセットアップからここに見られるように生産のための1のための一つ:Node.js SSHモンゴースを使ったMongoDBへのトンネル

Two Mongo DBs

生産DBはここに見られるようにSSHが(詳細は明らかに変更されました)私のデジタルオーシャン仮想サーバーにトンネルです。接続するとき、この設定は正常に動作します/私の生産のウェブサイトから:

SSH Tunnel Settings

私は今、さまざまな/関連プロジェクトに取り組んで、私の生産に私のローカルマシンを接続する必要があるのです DB、だから私はそれが完了するためにtunnel-sshのような何かを使う必要があると思った。私はthis answerを例にしていますが、私はError: (SSH) Channel open failure: open failedを取得しています。または、私のDev dbに接続しています(27017を私のdstHost/dstPort/localPortとして使用しています)。私はこの間違ったことを考えなければならない、または私は私の構成に馬鹿になっている。私は明らかにMongo/Mongooseの初心者ですから、どちらも可能です。何かアドバイス?

var fs = require("fs"); 
var mongoose = require('mongoose'); 
var tunnel = require('tunnel-ssh'); 

//===== db connection ===== 

var config = { 
    username:'my.username', 
    host:'my.ip.address', 
    agent : process.env.SSH_AUTH_SOCK, 
    privateKey:require('fs').readFileSync('/Users/myusername/.ssh/id_rsa'), 
    port:22, 
    dstHost:'mongodb://localhost:27000/mydbname', 
    dstPort:27000, 
    localHost:'127.0.0.1', 
    password:'mypassword', 
    localPort: 27000 
}; 

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

    var db = mongoose.connection; 
    db.on('error', console.error.bind(console, 'DB connection error:')); 
    db.once('open', function() { 
     // we're connected! 
     console.log("DB connection successful"); 
     // console.log(server); 
    }); 
}); 

ありがとうございます!

答えて

2

dstHostは、MongoDB接続文字列ではなく、ホスト名/ IPである必要があります。この特定のケースでは、あなたが実際に提供している値にデフォルト設定されているので、実際にdstHost,localHost、およびlocalPortを省略することができます。

+0

まあ、少なくとも進歩。これらの3つをコメントアウトすると、「エラー:(SSH)チャンネルオープン失敗:接続が拒否されました」というメッセージが表示されます。あなたに何かを意味する?オフ私はGoogleのマシンに行く... – jeremytripp

+1

あなたはあなたのスクリーンショットに表示するのと同じポートを使用していない。それに合わせてそれに合わせて変更してみてください。また、接続文字列のポートも変更する必要があります。 – mscdex

+0

これはチケットです。今朝あなたのコメントを読んだあと、5秒後に痛みを伴う明白で固定された。本当にありがとう! – jeremytripp

3

将来の参照のための最終的な設定です。 mscdexのおかげで、私はに正しい dstPortを提供し、それを私のMongo URI文字列(27017)に入れるだけでした。とても簡単。お役に立てれば。

var config = { 
    username:'myusername', 
    host:'my.ip.address', 
    agent : process.env.SSH_AUTH_SOCK, 
    privateKey:require('fs').readFileSync('/Users/myusername/.ssh/id_rsa'), 
    port:22, 
    dstPort:27017, 
    password:'mypassword' 
}; 

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

    var db = mongoose.connection; 
    db.on('error', console.error.bind(console, 'DB connection error:')); 
    db.once('open', function() { 
     // we're connected! 
     console.log("DB connection successful"); 
    }); 
}); 
+0

こんにちは私はあなたのソリューションを試してみましたが、それはかなり役に立ちましたが、私はそれを動作させるためにパスフレーズを追加しなければなりませんでした。どうもありがとうございました :) – Yoga

関連する問題