ssh tunnel 連線 port 轉發
Ubuntu 系統網路 ssh 指令進行連線的本地端 ssh tunnel,將資料 port 轉發至遠端主機
Categories:
有些主機會因為安全性的疑慮,所以關閉對外連線的 port,但如果我們可以透過 ssh 連線至主機時,可以透過 ssh tunnel
SSH Tunnel 指令
原理
你=>SSH Tunnel 跳板(可以存取目標的主機)=>目標
指令
ssh -L
<你的 port>:<目標 ip / dns>:<目標 port><SSH Tunnel 跳板帳號>@<SSH Tunnel 跳板 ip / dns>
ssh -L
<your-port>:<target-server-ip-or-dns>:<target-port><ssh-tunnel-account>@<ssh-tunnel-ip-or-dns>
連線資料庫範例
ssh -L 33306:mysql.kejyun.com:3306 [email protected]
連線完成後,就可以在本地端透過 127.0.0.1 的 33306 port 連線至遠端的資料庫
連線網頁範例
ssh -L 8080:web.kejyun.com:80 [email protected]
連線完成後就可以在本地端透過 http://127.0.0.1:8080/ 連線至遠端網頁的 80 port
參數說明
| 說明 | 參數 |
|---|---|
| 建立本地端 port forwarding | -L |
| 背景執行 | -f |
| 不要執行遠端指令 | -N |
不要執行遠端指令並在背景執行範例
ssh -L 33306:mysql.kejyun.com:3306 -N -f [email protected]
SSH Tunnel 到不對外開放連線的主機
我們可能會有資料庫主機完全沒有對外連線,連 3306 port 都無法連線,但我們有允許其中一台 Web 主機可以連線至資料庫,我們可以 SSH Tunnel 至該 Web 主機,再連線至資料庫主機
我們允許主機 web.kejyun.com 可以連線至資料庫 mysql.kejyun.com,但資料庫 mysql.kejyun.com 主機是完全不對外開放的,可以使用 ssh 連線至 web.kejyun.com,再請求連線至資料庫 mysql.kejyun.com 主機,指令會像這樣
ssh -L
<本地端 port>:<不對外開放資料庫主機 ip / dns>:<資料庫主機 port><ssh 連線對外開放主機 ip / dns>
ssh -L 33306:mysql.kejyun.com:3306 -N -f [email protected]
除錯
列出目前所有 SSH Tunnel
lsof -i -n | egrep '\<ssh\>'
參考資料
- How to Set up SSH Tunneling (Port Forwarding) | Linuxize
- How to Use SSH Port Forwarding {Ultimate Guide}
- How to Create SSH Tunneling or Port Forwarding in Linux
- [教學] 透過 SSH Tunnel 將伺服器內部服務綁定到本機電腦上 | 辛比誌