使用tunnel-ssh通过ssh通过nodeJS中的mongoose通过SSH连接到远程服务器mongoDB

anu*_*ysh 5 ssh mongoose mongodb node.js ssh-tunnel

我试图通过SSH连接到远程服务器mongoDB并进行了所提供的配置

import tunnel from 'tunnel-ssh';

const config = {
    username: 'username',
    Password: 'password',
    host: process.env.SSH_SERVER, //192.168.9.104
    port: 22,
    dstHost: 'localhost',
    dstPort: process.env.DESTINATION_PORT, //27017
    localHost: '127.0.0.1',
    localPort: 27018
};
Run Code Online (Sandbox Code Playgroud)

这是已定义的配置,在这里我需要连接到远程服务器192.168.9.104。因此,将特定的主机选择为SSH主机。提供了相同的用户名和密码。并且建立的连接如下。

class DB {
    initDB() {
        tunnel(config, (error, server) => {
            if (error) {
                console.log('SSH connection error: ' + error);
            }

            const url = 'mongodb://127.0.0.1:27018/myDBname';
            mongoose.connect(url, { useNewUrlParser: true });
            mongoose.plugin(toJson);
            mongoose.plugin(setProperties);

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

但是,当调用db.init()函数时,将弹出以下错误消息

events.js:183
      throw er; // Unhandled 'error' event
      ^

Error: All configured authentication methods failed
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚配置哪里出了问题。我已经尝试将127.0.0.1用于dstHost。以及将192.168.9.104用作dstHost,但错误仍然存​​在。凯文·李提出了类似的方法。以这个问题为例

anu*_*ysh 4

文档存在错误,建议使用上面提到的“密码”键进行配置,但它应该是“密码”,因此配置看起来像这样

const config = {
    username: 'username',
    password: 'password',
    host: process.env.SSH_SERVER, //192.168.9.104
    port: 22,
    dstHost: 'localhost',
    dstPort: process.env.DESTINATION_PORT, //27017
    localHost: '127.0.0.1',
    localPort: 27018
};
Run Code Online (Sandbox Code Playgroud)

其余的实现都是现场进行并经过测试的。