2 min read

利用 SSH Tunnel 做跳板(aka. 翻牆)

Table of Contents

SSH參數說明:

  • -N : 不執行任何指令
  • -f : 在背景執行
  • -L : 將 local port 轉向
  • -R : 將 remote port 轉向
  • -D : socks proxy

建立 SSH tunnel(正向)

# syntax: ssh -L local_port:remote_address:remote_port [email protected]

# 經過 ssh://localhost:2323 的連線,會藉由 serverB 作為跳板,再連到 ptt.cc:22
[user@serverA]$ ssh -NfL 2323:ptt.cc:22 user@serverB

# 連線
[user@serverA]$ ssh bbsu@localhost -p 2323

建立 SSH tunnel(反向)

注意,開啟反向 tunnel 之後,等於區網開了一個洞,外面的人可以連進來,可能會造成安全風險,請謹慎使用。
若配合rdesktop 之類的程式使用,甚至可以在桌面環境遠端遙控。

# syntax: ssh -R remote_port:local_address:local_port [email protected]

# 經過 serverB:8888 的連線,都會 tunnel 到 serverA:1234
[user@serverA]$ ssh -NfR 8888:localhost:1234 user@serverB

# 連線
[user@serverB]$ ssh user@localhost -p 8888

# 遠端桌面
[user@serverB]$ rdesktop localhost:8888

建立 SOCKS proxy server

# syntax: ssh -D port user@host

[user@serverA]$ ssh -NfD 2323 user@serverB

# 讓 Chrome 透過 proxy 連線(須先關閉所有運行中的 Chrome)

# Linux/Windows
# 將以下設定加入啟動 Chrome 的「目標」(右鍵 ➡️ 內容)後面
--proxy-server="socks5://localhost:2323"

# macOS
# 在 terminal 內使用指令方式開啟 Chrome
open -a "Google Chrome" --args --proxy-server="socks5://localhost:2323"

# 啟動以後,瀏覽所有網頁都會透過這台 proxy server

列出使用中的 ssh tunnel

ps aux | grep ssh

參考資料