【问题标题】:Connecting to mongodb through ssh username/password through nodejs通过nodejs通过ssh用户名/密码连接mongodb
【发布时间】:2018-05-15 09:44:43
【问题描述】:

我正在尝试通过 nodejs 通过 ssh 用户名/密码连接到 Mongodb,如下所示:

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

var config = {
username : 'xyz',
host: 'xx-xxx-xx.com',
port:22,
password:'xxx',
dstPort:27017,
localPort:27017
};

console.log(tunnel);
var server = tunnel(config, function (error, server) {

if(error){
    console.log("SSH connection error: " + error);
}
console.log(server);
mongoose.connect('mongodb://localhost:27017/myDB');

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

但我收到如下错误: 数据库连接错误:{ MongoError: connection 0 to localhost:27017 timed out

这里有什么问题?

【问题讨论】:

    标签: node.js mongodb


    【解决方案1】:

    可能是因为您在配置选项中缺少“dstHost”。

    “dstHost”必须是目标服务器 url。

    来自官方tunnel-ssh doc

     var config = {
          username:'root',
          Password:'secret',
          host:sshServer,
          port:22,
          dstHost:destinationServer,
          dstPort:27017,
          localHost:'127.0.0.1',
          localPort: 27000
        };
    
        var tunnel = require('tunnel-ssh');
        tunnel(config, function (error, server) {
          //.... 
        });
    

    【讨论】:

    • 我尝试添加 dstHost 。但我遇到了同样的错误。
    • 您是否也将 localHost:'127.0.0.1' 添加到选项中?
    • 是的,我也尝试添加 localHost:'127.0.0.1' 。但得到相同的结果。
    • 可以在没有 tunnelin 的情况下连接到本地数据库吗?如果是这样,那么您的 ssh 服务器肯定缺少一些配置,请查看此线程 stackoverflow.com/questions/38509995/… 也许您需要私钥?
    • 我可以毫无错误地连接到 localdb。我没有任何私钥。通过 ssh 用户名/密码,我可以在 MongoDB Compass 中连接,但不能从 nodejs 程序中连接
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 2019-01-12
    • 2014-10-15
    • 2019-05-13
    • 2016-06-24
    • 2012-07-01
    相关资源
    最近更新 更多