使用隧道 ssh 通过 nodeJS 中的 mongoose 通过 ssh 连接到远程服务器 mongoDB

Posted

技术标签:

【中文标题】使用隧道 ssh 通过 nodeJS 中的 mongoose 通过 ssh 连接到远程服务器 mongoDB【英文标题】:Connect to a remote server mongoDB via ssh through mongoose in nodeJS using tunnel-ssh 【发布时间】:2019-11-19 16:31:59 【问题描述】:

我试图通过 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
;

这是我需要连接到远程服务器 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');
            );
        );
    

但是当调用 db.init() 函数时会弹出以下错误

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

Error: All configured authentication methods failed

我无法弄清楚配置出错的地方。我尝试将 127.0.0.1 用于 dstHost。以及将 192.168.9.104 也作为 dstHost 但错误仍然存​​在。 kevin lee 提出了类似的方法。这里以question为例

【问题讨论】:

您拥有Password 而不是password。你的实际代码中有这个错字吗? npmjs.com/package/tunnel-ssh 的隧道 ssh 文档提到“密码”而不是密码。 “密码”键错误。它应该是带有小写字母的“密码”。感谢您的评论。 【参考方案1】:

文档出现错误,提示上述配置带有“密码”键,但它应该是“密码”,因此配置看起来像这样

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
;

实施的其余部分已确定并经过测试。

【讨论】:

以上是关于使用隧道 ssh 通过 nodeJS 中的 mongoose 通过 ssh 连接到远程服务器 mongoDB的主要内容,如果未能解决你的问题,请参考以下文章

通过 php 中的 ssh 连接隧道请求

使用 JSch 通过 SSH 隧道访问生产环境中的 JMX

通过 SSH 隧道连接到 .Net Core 中的 AWS DocumentDb

无法使用 SSH 隧道将 MongoDB Compass 连接到 AWS DocumentDB

无法通过 python 中的 ssh 隧道连接到远程数据库

通过 JSch 建立 SSH 隧道