如何通过ssh隧道连接到mongodb服务器

我使用 sequelpro连接到我在AWS上的远程mysql服务器是 easy,但我正在努力与mongodb做同样的事情.

我尝试通过命令行设置ssh隧道,如下所示:

ssh -fN -l root -i path/to/id_rsa -L 9999:host.com:27017 host.com

我也尝试用ip地址替换主机

我的想法是将端口9999上的所有mongodb连接转发到端口27101上主机上的连接.但是当我运行命令时:

mongo --host localhost --port 9999

连接失败,我得到了这个:

MongoDB shell version: 2.6.0
connecting to: localhost:9999/test
channel 2: open failed: connect failed: Connection timed out
channel 3: open failed: connect failed: Connection timed out
2014-05-22T14:42:01.372+0300 DBClientCursor::init call() failed
2014-05-22T14:42:01.374+0300 Error: DBClientBase::findN: transport error: localhost:9999 ns: admin.$cmd query: { whatsmyuri: 1 } at src/mongo/shell/mongo.js:148
exception: connect failed

如果我运行sudo netstat -plnt我得到以下(似乎按顺序):

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name   
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      4242/node           
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1342/httpd2-prefork 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      2552/sshd           
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      2505/master         
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      11719/mongod        
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      16561/redis-server

我知道我做错了什么?

更新:
这是最终的功能命令的样子(信用转到kenster):

ssh -fN -i ~/path/to/id_rsa -L 6666:localhost:27017 root@remote.server.com

-fN命令使此命令在后台运行

“通道2”和“通道3”行来自ssh.远程服务器上的sshd实例正在尝试连接到host.com端口27017以便为隧道连接提供服务,并且它出现“连接超时”错误.

换句话说,远程服务器上的sshd无法到达隧道的目标.由于远程主机也是您应该通过的主机,因此很难说具体问题是什么.可能是“host.com”解析为多个IP地址.您正在与群集中的一台服务器建立SSH连接,然后选择群集中的其他服务器作为隧道目标.您可以尝试将隧道目标更改为“localhost”而不是“host.com”:

ssh -fN -l root -i path/to/id_rsa -L 9999:localhost:27017 host.com

更新:

“-L 9999:localhost:27017”表示本地服务器上的ssh客户端侦听端口9999上的连接.当它获得连接时,它将连接隧道连接到远程服务器上的sshd实例.远程sshd实例从那里连接到localhost:27017.所以这里的“localhost”是从远程服务器的角度来看的.

使用netstat输出,为什么它之前没有工作更清楚一点. “127.0.0.1:27017”部分表示Mongodb专门绑定到远程主机上的localhost(127.0.0.1)接口.您无法通过尝试连接到主机的常规IP地址直接联系该mongodb实例 – 您只能通过localhost地址联系该mongodb实例.当然,因为它是localhost,所以只能从运行在同一主机上的客户端联系.

所以,你现在的方式 – 通过ssh隧道连接到服务器,然后从那里连接到localhost – 是这样做的方法.