SSH Tunnel

Undefined443發表於2024-04-20

本地轉發

ssh USER@HOST -CNfL 80:localhost:8080

此時訪問本地主機的 80 埠將會被轉發到遠端主機 HOST 的 localhost:8080 埠。

  • -L: 本地轉發
  • -C: 此標誌啟用壓縮,有助於減少資源消耗並加快速度。
  • -N: 不傳送任何命令,只用來建立連線。
  • -f: 將 SSH 連線放到後臺。避免長時間不用 SSH 連線時終端失去響應

可以透過 ps 命令找到 ssh 程序並透過 kill 命令來關閉隧道。

配置檔案

可以透過配置檔案來簡化隧道的建立。編輯 ~/.ssh/config

Host local-forward
    HostName example.com
    User my_user
    IdentityFile ~/.ssh/my_private_key
    LocalForward 80 localhost:8080
    Compression yes
    ServerAliveInterval 60
    ServerAliveCountMax 2
  • Host local-forward:這是這個連線配置的別名,用在ssh命令中作為目標主機的引數。
  • HostName example.com:實際主機名或 IP 地址。
  • User my_user:遠端伺服器的使用者名稱。
  • IdentityFile ~/.ssh/my_private_key:用於身份驗證的私鑰檔案路徑。
  • LocalForward 80 localhost:8080:這是隧道配置的關鍵部分。它會將本地機器上的 80 埠轉發到遠端機器上的 8080 埠。當你在本地機器上訪問 localhost 的 80 埠時,實際上是透過 SSH 隧道訪問遠端機器上的 8080 埠。
  • Compression yes: 啟用資料壓縮。
  • ServerAliveInterval 60:每 60 秒向伺服器傳送一次保活訊息。
  • ServerAliveCountMax 2:在認定伺服器不響應之前,允許傳送保活訊息的最大次數。

遠端轉發

ssh USER@HOST -R 80:localhost:8080

此時訪問遠端主機 HOST 的 80 埠會被轉發到本地主機的 localhost:8080 埠。

配置檔案

Host reverse-forward
    HostName example.com
    User my_user
    RemoteForward 80 localhost:8080
  • RemoteForward 80 localhost:8080:配置遠端埠轉發。這條命令的意思是將遠端伺服器的 80 埠轉發到本機的 localhost:8080 埠。訪問遠端伺服器的 80 埠就像訪問本地的 localhost:80 埠一樣。

這個配置意味著,當你連線到 remote-forward 這個配置指定的主機時,SSH 會自動設定一個遠端埠轉發,把遠端主機的 80 埠對映到本機的 8080 埠。

動態轉發

ssh USER@HOST -D 7890

此時如果在應用程式中配置代理伺服器為 socks5://HOST:7890,則所有請求都將被髮送到遠端主機的 7890 埠進行代理。

配置檔案

   Host dynamic-forward
       HostName example.com
       User my_user
       DynamicForward 7890
  • DynamicForward 1080: 啟用動態埠轉發,並繫結本地的 1080 埠。

相關文章