本地轉發
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 埠。