2016-12-01 3 views
2

У меня есть два Mongo DBs. Один мой Dev окружающей среды, одна для производства, как видно здесь из моей установки Robomongo:Node.js SSH Туннелирование в MongoDB с использованием Mongoose

Two Mongo DBs

Производство ДБ SSH туннелируется на мой виртуальный сервер Digital Ocean, как показано здесь (специфика была изменена, очевидно). Эта установка отлично работает при подключении к/с моего сайта производства:

SSH Tunnel Settings

Я сейчас работаю над другим/проектом, связанного и нужно подключить местной машины к моим производства DB, поэтому я предположил, что мне нужно будет использовать что-то вроде tunnel-ssh, чтобы это сделать. Я привел this answer в качестве примера, но я либо получаю Error: (SSH) Channel open failure: open failed ИЛИ он подключается к моему Dev db (когда я использую 27017 как мой dstHost/dstPort/localPort). Должно быть, я думаю об этом неправильно, или я не знаю, как это сделать. Я, по общему признанию, тотальный монгольский/мангустский новичок, поэтому оба варианта одинаково возможны. Любой совет?

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 должно быть именем хоста/IP, а не строкой соединения MongoDB. В этом конкретном случае вы можете фактически опустить dstHost, localHost и localPort в этом конкретном случае, потому что они уже по умолчанию задают значения, которые вы предоставляете.

+0

Ну, прогресс как минимум. Комментируя эти три, теперь я получаю сообщение об ошибке «Ошибка: (SSH)): Connection отказал'. Что-нибудь для вас? Off Я перехожу к машине 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

Смежные вопросы