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 kj@mysql.kejyun.com
連線完成後,就可以在本地端透過 127.0.0.1
的 33306
port 連線至遠端的資料庫
連線網頁範例
ssh -L 8080:web.kejyun.com:80 kj@web.kejyun.com
連線完成後就可以在本地端透過 http://127.0.0.1:8080/
連線至遠端網頁的 80 port
參數說明
說明 | 參數 |
---|---|
建立本地端 port forwarding | -L |
背景執行 | -f |
不要執行遠端指令 | -N |
不要執行遠端指令並在背景執行範例
ssh -L 33306:mysql.kejyun.com:3306 -N -f kj@mysql.kejyun.com
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 kj@web.kejyun.com
除錯
列出目前所有 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 將伺服器內部服務綁定到本機電腦上 | 辛比誌