利用 SSH tunnel mapping 本地與 EC2 的 Port

當 AWS 上的 EC2 架好了,而我們想要從本地端訪問私網域中的 EC2。

這時候我們就需要建立 ssh tunnel,讓我們可以透過公網域的 Bastion 機(跳板)去訪問目標的 Port。

此處同樣以 MongoDB 作為舉例。

目標 1 : 建立 ssh Tunnel

step1 : 不多說,直接下指令連線吧!

ssh -A -i <Bastion.pem 的路徑> -NfL [localhost:]27017:<Mongo-EC2 private ip>:27017 ec2-user@<Bastion-EC2 public ip>

* [ ] 表示可加可不加

* 其中的 private IP 是内網 IP,public IP 則是對外的 IP,這部分都可以從 EC2 的服務中找到

之後本地的 27017 port 就透過 ssh tunnel 跟 mongo-EC2 的 27017 port 連在一起囉。

未來丟資料上 EC2 的時候,只需要訪問本地的 27017 就可以了,不用透過 bastion 進到 mongo-EC2。

(也可以直接透過自己的 27017 看到 mongodb 的狀態)

但是單看這行指令可能不明所以,所以附上一張圖以及介紹一下 ssh 的指令

ssh

-A 讓你帶上 ssh-agent 所挾帶的 pem

-i 挾帶 pem

-N 連線後不執行指令

-f 連線後背景執行

-L 是啟用 SSH Tunnel

-v 啟動 debug

* 各指令詳細的說明,可以在你的 terminal 中鍵入 man ssh 去查看

這邊補充說明,建好連線之後,可以做的簡單操作

操作 1 : 在本地端用 python 建立連線及簡單的 pyMongo 使用。

from pymongo import MongoClient

#make a connection

client = MongoClient('localhost',27017)

#db name

db = client['db_name']

#collection name

collection = db['collection_name']

#insert data

collection.insert({"there":"is"})

操作 2 : 利用圖形化介面管理mongodb

step1 : 下載 mongo GUI:Robo3T

https://robomongo.org/download

step2 :建立 new connection, address 為 localhost:27017

補充 : 關閉ssh tunnel的方式

Linux

step1 : 連線後下查目前所有聆聽port的指令 netstat -ntulp

會發現 31280 port 就被 ssh 這個程式佔用了。

所以現在連線 localhost 的 31280 port 就等於存取遠端的 <IP>:80。

step2 : 可以下 kill 指令把這個 ssh process 殺掉。

MacOS

* 須利用 lsof 取代 netstat

step1 : lsof -nP | grep 27017

參考 :

lsof : https://tonydeng.github.io/2016/07/07/use-lsof-to-replace-netstat/

關閉 ssh tunnel 參考 : http://lab.howie.tw/2012/07/disable-encryption-ssh.html

results matching ""

    No results matching ""