jer*_*ipp 5 ssh mongoose mongodb node.js
我有两个Mongo DB.一个用于我的开发环境,一个用于生产,如我在Robomongo设置中所见:
生产数据库通过SSH隧道连接到我的数字海洋虚拟服务器,如此处所示(具体情况已经明显改变).连接到我的生产网站/从我的生产网站连接时此设置正常:
我现在正在开发一个不同/相关的项目,需要将我的本地机器连接到我的生产数据库,所以我假设我需要使用像tunnel-ssh这样的东西来完成它.我已经按照这个答案作为例子,但是我要么正在Error: (SSH) Channel open failure: open failed
连接到我的Dev db(当我使用27017作为我的dstHost/dstPort/localPort时).我一定在考虑这个错误,或者我对我的配置感到愚蠢.我是公认的Mongo/Mongoose新手,所以两者都是可能的.有什么建议?
var fs = require("fs");
var mongoose = require('mongoose');
var tunnel = require('tunnel-ssh');
//===== db connection =====
var config = {
username:'my.username',
host:'my.ip.address',
agent : process.env.SSH_AUTH_SOCK,
privateKey:require('fs').readFileSync('/Users/myusername/.ssh/id_rsa'),
port:22,
dstHost:'mongodb://localhost:27000/mydbname',
dstPort:27000,
localHost:'127.0.0.1',
password:'mypassword',
localPort: 27000
};
var server = tunnel(config, function (error, server) {
if(error){
console.log("SSH connection error: " + error);
}
mongoose.connect('mongodb://localhost:27000/mydbname');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'DB connection error:'));
db.once('open', function() {
// we're connected!
console.log("DB connection successful");
// console.log(server);
});
});
Run Code Online (Sandbox Code Playgroud)
提前致谢!
最终的工作配置供将来参考.感谢mscdex - 我只需要提供正确的 dstPort并将其包含在我的Mongo URI字符串(27017)中.很简单.希望这可以帮助.
var config = {
username:'myusername',
host:'my.ip.address',
agent : process.env.SSH_AUTH_SOCK,
privateKey:require('fs').readFileSync('/Users/myusername/.ssh/id_rsa'),
port:22,
dstPort:27017,
password:'mypassword'
};
var server = tunnel(config, function (error, server) {
if(error){
console.log("SSH connection error: " + error);
}
mongoose.connect('mongodb://localhost:27017/mydbname');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'DB connection error:'));
db.once('open', function() {
// we're connected!
console.log("DB connection successful");
});
});
Run Code Online (Sandbox Code Playgroud)
dstHost
需要是主机名/IP,而不是 MongoDB 连接字符串。在这种特殊情况下,您实际上可以省略dstHost
,localHost
和localPort
在这种特殊情况下,因为它们已经默认为您提供的值。
或者,如果您不想更改代码,只要您在隧道服务器上拥有 ssh 公钥,您可以通过终端上的 ssh 创建隧道:
ssh -fNL <local_port>:<mongodb_server_hostname_or_ip>:<mongodb_server_port> <tunnel_server_user>@<tunnel_server_hostname_or_ip>
Run Code Online (Sandbox Code Playgroud)
使用虚构 IP 连接到虚假 AWS EC2 AMI Linux 的示例
ssh -fNL 27000:101.202.10.20:27000 ec2-user@33.44.55.66
Run Code Online (Sandbox Code Playgroud)
现在这mongoose.connect('mongodb://localhost:27000/mydbname');
就像一个魅力。;)
归档时间: |
|
查看次数: |
8152 次 |
最近记录: |