我的凭据与Robomongo配合良好,但我无法与node.js建立连接
我尝试使用ssh 2和tunnel-ssh npm模块建立连接,但两次都失败了。
- mongo连接不需要密码
- ssh连接是用pem键建立的
这是我在ssh 2模块中使用的代码,我可以正确地建立隧道,但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
});
代码为tunnel-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给我一个权限拒绝错误,后者给我一个超时
5条答案
按热度按时间egmofgnx1#
正如mscdex提到的,ssh 2不是一个很好的模块,不能用来建立到数据库的ssh隧道连接。tunnel-ssh更合适。
以下是我使用的配置选项:
dstPort:远程数据库连接端口
localPort:与dstPort相同,它将是用于本地机器的端口
用户名:SSH用户名,
主机:SSH地址
dstHost:数据库连接url(...mongodbns.com),
privateKey:SSH密钥
然后,一旦你的隧道连接通过mongoose连接到你的localhost,如mondodb://localhost:27000(使用localPort中定义的localport)
xtupzzrd2#
由于
mongoose
不支持传入流作为底层连接,因此您必须侦听本地端口(例如27000),并通过ssh连接将传入连接转发到该端口。幸运的是,存在构建在
ssh2
上的第三方模块,可以为您提供这种功能,例如tunnel-ssh
。liwlm1x93#
您可以使用node的官方mongodb客户端来实现
blmhpbnm4#
从本地node js应用程序连接到私有Amazon RDS示例这将允许您从本地计算机安全地连接到RDS示例。
https://repost.aws/questions/QUuRQ-oorMQLahG6egHb4-bg/how-can-i-connect-to-a-private-amazon-rds-instance-from-local-node-js-application-which-was-earlier-using-non-ssh-sequelize-connection
6qqygrtg5#
由于某些原因,上面的所有答案对我都不起作用,我发布了对我有用的代码。我正在从我的Nodejs web服务器隧道到在线ubuntu vm上的PostgreSQL数据库: