1. 程式人生 > >配置SSH隧道訪問Ubuntu服務器上的MongoDB

配置SSH隧道訪問Ubuntu服務器上的MongoDB

add 重啟 裏的 登錄 環境 localhost bsp ssh服務器 tcp/ip

為了數據安全,在MongoDB的配置文件裏,一般會把默認的27017端口port改為自定義的端口號,然後把允許訪問的IP設為127.0.0.1(即主機本身)。但是這樣就會在開發的過程查看數據時帶來麻煩,必須去服務器端或調用部署在服務器的API接口才能很好地可視化地查詢數據。為了能在客戶端也能使用可視化工具,可以建立一條SSH隧道,直接在客戶端訪問遠程服務器的數據庫。

本文例子基於以下開發環境:

服務器端:Ubuntu 16.04 x86_64,MongoDB 3.4.6

客戶端:Windows10 x86_64,Robomongo 1.0.0-RC1,PuTTY或XShell

=========================================================================

有兩種思路可以建立SSH隧道以實現客戶端Robomongo訪問服務器MongoDB,一是使用PuTTY或XShell連接服務器時建立隧道,將服務器的MongoDB監聽端口映射到客戶端的指定端口,這樣在客戶端使用Robomongo連接本地的指定端口即可訪問到服務器的MongoDB端口,缺點是連接數據庫前需要保持PuTTY或者XShell處於與數據庫的連接狀態;二是使用Robomongo自帶的建立SSH隧道方式,只需要在Robomongo新建連接,輸入建立SSH會話所需的用戶名密碼或者密鑰,相當於使用Robomongo登錄到服務器,然後在服務器訪問本地的MongoDB端口即可,優勢在於不需要單獨建立SSH連接(沒錯這種方法才是推薦使用的,但是第一種就可以不局限於Robomongo的連接)。

=========================================================================

註意:因為SSH隧道是基於TCP Forward建立的,因此,在sshd配置文件裏一定要允許TCPForwarding,我開始配置sshd的時候將這個禁用了,所以爬了好久才爬出這個坑。

$ sudo vim /etc/ssh/sshd_config

修改如下字段:

AllowTCPForwarding yes

重啟sshd

$ sudo systemctl restart sshd

另外,要把MongoDB的配置文件進行修改,使其僅能通過本地訪問:

$ sudo vim /etc/mongod.conf

修改如下字段:

net:

port: 27017

bindIP: 127.0.0.1

=========================================================================

一、使用PuTTY或XShell建立客戶端與服務器的SSH隧道

PuTTY: 設置好登錄信息(包括服務器IP端口用戶密碼密鑰等)後,在左側欄找到Connection/SSH/Tunnels,Add new forwarded port下,Source Port 填寫需要映射到客戶端的端口號,Destination填寫服務器的主機和端口號(服務器的主機當然是localhost了)下面選Local和Auto即可,然後點擊Add,保存以便下次登錄方便,點擊Open即可建立SSH隧道連接。

技術分享

然後,打開Robomongo,新建連接到localhost:27018即可連接到服務器的MongoDB了。

技術分享

或者說,可以通過監聽本地的27018端口即可監聽到服務器的27017端口。

類似地,使用XShell時,填寫好登錄主機端口用戶名密碼密鑰等信息後,在左側欄找到SSH/隧道,添加TCP/IP轉移規則類型為Local, 源主機即使客戶端的主機及偵聽端口,目標則是服務器的主機及端口,確定後連接,即可建立SSH隧道。

技術分享

=========================================================================

二、使用Robomongo自帶的SSH隧道

打開Robomongo,在連接設置裏的SSH選項卡中啟用SSH tunnel並設置登錄SSH服務器的信息,回到Connection選項卡,填入主機(localhost)與服務器上MongoDB對應的端口。保存連接即可。

技術分享

技術分享

配置SSH隧道訪問Ubuntu服務器上的MongoDB