Ssh

如何通過 ssh 隧道連接到 mongodb 伺服器

  • June 10, 2019

使用sequelpro連接到 AWS 上的遠端 mysql 伺服器對我來說很容易,但是我正在努力用 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 實例。當然,由於它是本地主機,因此您只能從在同一主機上執行的客戶端聯繫。

所以,你現在的做法——通過 ssh 與伺服器建立連接,然後從那裡連接到 localhost——就是這樣做的方法。

引用自:https://serverfault.com/questions/597765