Node.js 在我的节点应用程序中使用SSH连接到MongoDB

Node.js 在我的节点应用程序中使用SSH连接到MongoDB,node.js,mongodb,ssh,digital-ocean,Node.js,Mongodb,Ssh,Digital Ocean,我的数据库使用DigitalOcean,我正在尝试在我的节点应用程序中连接到它 我发现了一个名为隧道ssh的npm,但是我在连接它时遇到了问题。我的代码如下 它说DB连接成功,但是当我执行console.log(mongoose)时,它显示主机和主机为空 如果我执行console.log(mongoose),则在console.log(“DB连接成功”)之后然后它向我显示主机 var tunnel = require('tunnel-ssh'); var config = { agen

我的数据库使用DigitalOcean,我正在尝试在我的节点应用程序中连接到它

我发现了一个名为
隧道ssh
的npm,但是我在连接它时遇到了问题。我的代码如下

它说DB连接成功,但是当我执行
console.log(mongoose)
时,它显示主机和主机为空

如果我执行
console.log(mongoose)
,则在
console.log(“DB连接成功”)之后然后它向我显示主机

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

var config = {
    agent : 'myuser',
    host: 'xxx:xxx:xxx:xxx'
    agent : process.env.SSH_AUTH_SOCK,
    privateKey:require('fs').readFileSync('id_rsa'),
    port:22,
    dstPort:27010,
    keepAlive: true
};

var server = tunnel(config, function (error, server) {

    if(error){
        console.log("SSH connection error: " + error);
    }

    mongoose.connect('mongodb://127.0.0.1:27017/mysuperdb');

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

});

你的端口不匹配。您有
dsport:27010
,但您的连接字符串是
'mongodb://127.0.0.1:27017/mysuperdb“
。需要更正其中一个。

您的端口不匹配。您有
dsport:27010
,但您的连接字符串是
'mongodb://127.0.0.1:27017/mysuperdb“
。其中一个需要更正。

以下是工作代码:

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

var config = {
    username : 'myuser',
    host: 'xxx:xxx:xxx:xxx',
    privateKey:require('fs').readFileSync('id_rsa'),
    port:22,
    dstPort:27010,
    localPort: 2000
};

var server = tunnel(config, function (error, server) {

    if(error){
        console.log("SSH connection error: " + error);
    }

    mongoose.connect('mongodb://127.0.0.1:2000/mysuperdb');

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

});

以下是工作代码:

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

var config = {
    username : 'myuser',
    host: 'xxx:xxx:xxx:xxx',
    privateKey:require('fs').readFileSync('id_rsa'),
    port:22,
    dstPort:27010,
    localPort: 2000
};

var server = tunnel(config, function (error, server) {

    if(error){
        console.log("SSH connection error: " + error);
    }

    mongoose.connect('mongodb://127.0.0.1:2000/mysuperdb');

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

});


你确定你的ssh密钥是正确需要的吗?对不起-你是什么意思?SSH密钥是有效的,如果这是问题的话。是的!我知道它是有效的,我只是想让你检查一下你是否得到了正确的。是的,它得到了正确的。你确定你的ssh密钥是正确需要的吗?对不起-你是什么意思?SSH密钥是有效的,如果这是问题的话。是的!我知道它是有效的,我只是想让你检查一下你是否正确获取了它。是的,当使用同一个dstPort 27017时,它正确获取了它,我得到错误
EADDRINUSE
——我理解这是因为该端口正在我的本地计算机上使用。因此,您在脚本所在的同一主机上安装了MongoDB,并且远程安装在另一台服务器上(通过ssh访问)?如果是这样,您需要将
localPort
添加到您的配置中,并将其设置为某个未使用的端口,然后在您的MongoDB连接字符串中使用该端口。我想我找到了。因此,是的,Mongo也在默认的27017端口上本地运行,因此我得到了EADDRINUSE错误。因此,当我在本地机器上停止MongoDB时,它工作正常。但是,是否可以说远程连接到x端口,但本地通过y端口传递?是的,添加我刚才提到的配置选项。谢谢,我尝试了,但我仍然得到了ECONNREFUSED-我想知道这是否是因为localPort:2000已经在使用?否则,为了让生活更轻松,我是否应该更改本地MongoDB正在使用的端口。我通过homebew安装MongoDB,但假设配置为通常的
/usr/local/etc/mongod.conf
。那么,我是否要停止并再次启动它?当使用同一个dstPort 27017时,我会得到错误
EADDRINUSE
——我理解这是因为该端口正在我的本地计算机上使用。因此,您在脚本所在的同一主机上安装了MongoDB,并且远程安装在另一台服务器上(通过ssh访问)?如果是这样,您需要将
localPort
添加到您的配置中,并将其设置为某个未使用的端口,然后在您的MongoDB连接字符串中使用该端口。我想我找到了。因此,是的,Mongo也在默认的27017端口上本地运行,因此我得到了EADDRINUSE错误。因此,当我在本地机器上停止MongoDB时,它工作正常。但是,是否可以说远程连接到x端口,但本地通过y端口传递?是的,添加我刚才提到的配置选项。谢谢,我尝试了,但我仍然得到了ECONNREFUSED-我想知道这是否是因为localPort:2000已经在使用?否则,为了让生活更轻松,我是否应该更改本地MongoDB正在使用的端口。我通过homebew安装MongoDB,但假设配置为通常的
/usr/local/etc/mongod.conf
。那我就停下来重新开始吗?