在我的Node App中使用SSH连接到MongoDB

时间:2017-01-22 15:08:49

标签: node.js mongodb ssh digital-ocean

我的数据库是DigitalOcean,我正在尝试在我的节点应用程序中连接它。

我发现了一个名为tunnel-ssh的npm但是无法连接到它。我的代码如下。

它表示数据库连接成功,但是当我执行console.log(mongoose)时,它会将主机和主机显示为空。

如果我console.log(mongoose)console.log("DB connection successful");之后会显示主持人。

var tunnel = require('tunnel-ssh');

var config = {
    agent : 'myuser',
    host: 'xxx:xxx:xxx:xxx'
    agent : process.env.SSH_AUTH_SOCK,
    privateKey:require('fs').readFileSync('id_rsa'),
    port:22,
    dstPort:27010,
    keepAlive: true
};

var server = tunnel(config, function (error, server) {

    if(error){
        console.log("SSH connection error: " + error);
    }

    mongoose.connect('mongodb://127.0.0.1:27017/mysuperdb');

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

});

2 个答案:

答案 0 :(得分:1)

这是工作代码:

var tunnel = require('tunnel-ssh');

var config = {
    username : 'myuser',
    host: 'xxx:xxx:xxx:xxx',
    privateKey:require('fs').readFileSync('id_rsa'),
    port:22,
    dstPort:27010,
    localPort: 2000
};

var server = tunnel(config, function (error, server) {

    if(error){
        console.log("SSH connection error: " + error);
    }

    mongoose.connect('mongodb://127.0.0.1:2000/mysuperdb');

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

});

答案 1 :(得分:0)

您的端口不匹配。您有dstPort: 27010,但您的连接字符串为'mongodb://127.0.0.1:27017/mysuperdb'。一个或另一个需要纠正。