標籤:儲存 http logs shel nat 映射 選項 .com tin
為了資料安全,在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