当前位置: 首页 > 面试题库 >

如何使用Node.js建立与MongoDB数据库的SSH隧道连接

刘野
2023-03-14
问题内容

我的凭据与Robomongo完美搭配,但无法与node.js建立连接,
我尝试使用ssh2和tunnel-ssh npm模块建立连接,但均失败。
-mongo连接不需要密码
-ssh连接使用pem密钥进行

这是我与ssh2模块一起使用的代码,我可以正确建立隧道,但是mongo连接失败

var Client = require('ssh2').Client;

var conn = new Client();
conn.on('ready', function() {
    console.log('Client :: ready');
    //mongo connection
        mongoose.connect('mongodb://localhost:27000/');
        var db = mongoose.connection;
        db.on('error', console.error.bind(console, 'connection error:'));
        db.once('open', function() {
            console.log("database connection established");
            var users = db.collection('user');
            var getallUsers = function (date, callback){
                users.find({}).toArray(function(err,data){
                    callback(data);
                })
            };
            getallUsers(null, function (data){
                console.log('data :'+  data);
            });
        });
    //end of mongo connection
}).connect({
    host: '**.**.**.**.**',
    port: 22,
    username: 'ec2-user',
    privateKey: key
});

和代码的隧道SSH

var config = {
    dstPort: 27000,
    user: 'ec2-user',
    host: '**.**.**.**.**',
    privateKey: key
};

var server = tunnel(config, function (error, server) {
    if(error){
        console.log("SSH connection error: " + error);
    }
    console.log('database connection initalizing');
    mongoose.connect('mongodb://localhost:27000/');

    var db = mongoose.connection;

    db.on('error', console.error.bind(console, 'connection error:'));
    db.once('open', function() {

        console.log("database connection established");

        var users = db.collection('user');
        var getallUsers = function (date, callback){
            users.find({}).toArray(function(err,data){
                callback(data);
            })
        };
        getallUsers(null, function (data){
            console.log(data);
        });

    });
});

我不确定在建立隧道之后是使用常规的MongoDB连接字符串还是将数据库引用为localhost,例如
mongodb:// localhost:portnumber。

mongodb://databasepath.subpath.mongodbdns.com:27000

Localhost给我一个权限被拒绝的错误,后者给我超时


问题答案:

正如mscdex所提到的那样,ssh2不是用来与数据库建立ssh隧道连接的好模块。tunnel-ssh更合适。

这是我使用的配置选项:

dstPort:远程数据库连接端口

localPort:与dstPort相同,它将是用于本地计算机的端口

用户名:SSH用户名,

主机:SSH地址

dstHost:数据库连接网址(… mongodbns.com),

privateKey:SSH密钥

然后,一旦您的隧道连接,通过猫鼬连接到您的本地主机,例如mondodb:// localhost:27000(使用您在localPort中定义的本地端口)

var server = tunnel(config, function (error, server) {
    if(error){
        console.log("SSH connection error: " + error);
    }
    mongoose.connect('mongodb://localhost:27000/');
    //...rest of mongoose connection
}


 类似资料:
  • 我试图从我的localhost(在端口24000上)通过堡垒盒隧道到我的mongo实例(在27017上),该实例只能通过VPC私有子网获得,因此我可以在连接到暂存数据库的同时进行本地开发。在我的OSX盒子上使用此隧道命令: ssh-A-L 24000:ip-10-0-11-11。ec2.内部:27017 ec2-3-211-555-333。计算-1。amazonaws。com-N-v “ip-10

  • 目标是使用SSH隧道将R连接到PostgreSQL。 刚刚用库RPostgreSQL和DBI进行了不成功的尝试。我没有找到传递SSH隧道参数(代理主机、代理用户和私钥)的方法。 我想知道是否有办法在db查询字符串中指定这些SSH参数?也许还有别的出路?

  • 我正在使用IntelliJ社区版和JPA Buddy开发一个Java项目(基于Spring Boot 2.6.x)。我想使用JPA Buddy进行实体实用程序和Liquibase集成。 生产数据库(MySQL 5.7)只能通过ssh隧道访问。 有没有办法使用ssh隧道配置数据库连接?如何从生产数据库生成变更日志? 谢谢米奇

  • 修复(编辑代码以反映我所做的更改) 我正在尝试使用Java通过SSH隧道连接到Mongo数据库。 我正在使用Mongo驱动程序3.0.2和jcraft(JSch)创建一个SSH隧道。我的想法是: 通过SSH连接到托管MongoDB安装的机器 设置从本地端口到远程MongoDB端口的端口转发 远程连接到MongoDB 我的代码如下所示: 这段代码在运行时, 不 EDIT:有效。 连接到SSH服务器工

  • 问题内容: 我正在学习python。我需要使用隧道创建者来从数据库中读取信息并关闭隧道。我使用paramiko,但是我没有使用tonelem示例。请举一个创建隧道的简单代码示例。 提前致谢! 问题答案: 在工作中,我们通常创建ssh隧道转发端口。我们的方法是使用标准命令,使子进程在单独的线程中运行。我找到了这个有用的链接:https : //github.com/paramiko/paramiko