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

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

它是简单的我使用续集,然而我在用 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  

知道我做错了什么吗?

更新: 这是最终的功能命令的样子(归功于肯斯特):

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

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

答案1

“通道 2”和“通道 3”行来自sshsshd远程服务器上的实例正在尝试连接到 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 建立与服务器的连接,然后从那里连接到本地主机 - 就是执行的方式。

答案2

为了使用 Robo 3T GUI 成功远程连接 MongoDB,我在 Ubuntu 18 Vagrant 盒子上进行了一些配置。我在以下步骤中进行了解释。

  1. 在 Ubuntu 服务器上,打开 mongo shell 运行:
    $ mongo
    
  2. 在 mongo shell 中,键入以下命令来创建新的管理员用户。

    > use admin;
    > db.createUser({user:"admin", pwd:"password", roles:[{ role: "root", db: "admin" }]});
    
  3. 默认情况下,mongodb 配置为仅允许来自 localhost(IP 127.0.0.1)的连接。我们需要允许来自任何 IP 地址的远程连接。以下更改应仅在您的开发服务器中完成。打开 etc/mongod.conf文件并进行以下更改。

    # network interfaces
        net:
            port: 27017
            bindIp: 0.0.0.0   #default value is 127.0.0.1
    

    同样在同一个mongod.conf文件取消注释安全选项并添加授权选项,如下所示。

    security:
        authorization: enabled
    
  4. 保存并退出mongod.conf文件并重新启动 mongodb 服务器。

    $ sudo servcie mongod restart
    
  5. 下载并安装 Robo 3T GUI 工具。

  6. 在 Robo 3T GUI 上,在连接设置中,您需要做一些更改,如下面的屏幕截图所示。

在此处输入图片描述

进入 mongodb行政您之前创建的数据库用户名和密码。

在此处输入图片描述

在这里,我输入了我的 Ubuntu 18 Vagrant box ssh 凭证。

在此处输入图片描述

保存更改并按连接图标来查看连接是否正常。

相关内容