通过Node.js使用SSH用户名/密码连接到MongoDB

4
我想通过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: 连接到localhost:27017的连接超时

这里出了什么问题?

1个回答

3
也许是因为你在配置选项中缺少了“dstHost”。
“dstHost”必须是目标服务器的网址。
来自官方tunnel-ssh文档
 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来解决问题。但是我仍然得到相同的错误。 - Sowmya
你是否也将 localHost:'127.0.0.1' 添加到选项中了? - gzp___
是的,我尝试添加localHost:'127.0.0.1'。但是得到了相同的结果。 - Sowmya
你能否在不使用隧道的情况下连接到本地数据库?如果可以,那么你的ssh服务器可能缺少一些配置,请查看此线程https://dev59.com/wpnga4cB1Zd3GeqPUSQQ?rq=1,也许你需要一个私钥? - gzp___
我可以无误地连接到本地数据库。我没有任何私钥。通过SSH用户名/密码,我能够在MongoDB Compass中连接,但无法从Node.js程序中连接。 - Sowmya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接