如何通过SSH隧道连接到MongoDB服务器

使用sequelpro连接到AWS上的远程mysql服务器非常简单 ,但是我正在用mongodb做同样的事情。

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

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

我也尝试用ip地址replace主机

我们的想法是将端口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 

任何想法我做错了什么?

更新:这是如何最终的function命令看起来像(信贷到kenster ):

 ssh -fN -i ~/path/to/id_rsa -L 6666:localhost:27017 [email protected] 

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

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

换句话说,远程服务器上的sshd无法到达隧道的目标。 由于远程主机也是你所要连接的主机,所以很难说具体问题是什么。 可能是“host.com”parsing为多个IP地址。 您正在与群集中的一台服务器build立SSH连接,然后select群集中的另一台服务器作为隧道目标。 您可以尝试将隧道目标更改为“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”是从远程服务器的angular度来看的。

有了netstat输出,为什么以前没有工作呢? “127.0.0.1:27017”部分意味着Mongodb特别绑定到远程主机上的本地主机(127.0.0.1)接口。 您不能通过尝试连接到主机的常规IP地址直接联系该mongodb实例 – 您只能通过本地主机地址联系该mongodb实例。 当然,因为它是本地主机,所以只能从运行在同一主机上的客户端联系。

所以,你现在正在做的方式 – 通过SSH连接到服务器,然后从那里连接到本地主机 – 是做到这一点。