文章目錄
- 前言
- 一、解鎖內部服務:SSH 本地轉發
- 1.1 什么是 SSH 本地轉發
- 1.2 本地轉發應用場景
- 二、打開外部訪問大門:SSH 遠程轉發
- 2.1 什么是 SSH 遠程轉發
- 2.2 遠程轉發應用場景
- 三、動態轉發:SSH 讓你擁有自己的 VPN
- 3.1 什么是 SSH 動態轉發
- 3.2 動態轉發應用場景
- 四、小結
- 推薦閱讀
前言
SSH(Secure Shell)不僅是一個用于安全遠程登錄的協議,還支持多種類型的端口轉發功能,包括本地轉發、遠程轉發和動態轉發。這些功能使我們能夠靈活地通過 SSH 隧道在不同網絡環境中安全地傳輸數據。本文將詳細介紹這三種轉發方式及其應用場景。
一、解鎖內部服務:SSH 本地轉發
1.1 什么是 SSH 本地轉發
SSH 本地轉發(SSH Local Port Forwarding)是一種通過 SSH 隧道將本地計算機的端口轉發到遠程服務器的特定端口的方法。其主要目的是在本地訪問遠程服務器上的服務,確保通信過程中的數據安全性。
-
用戶發起 SSH 連接命令:用戶在本地主機上使用 SSH 命令發起連接,指定本地端口和遠程主機及其端口。例如:
# 這條命令表示將本地主機的某個端口(本地端口)映射到遠程主機的某個端口(遠程端口),通過 SSH 服務器進行連接。 ssh -L 本地端口:遠程主機:遠程端口 用戶名@SSH服務器
-
建立 SSH 連接:本地主機與 SSH 服務器建立 SSH 連接,確保通信的安全性。
-
用戶訪問本地端口:用戶通過訪問本地主機的
localhost:本地端口
,實際訪問到遠程主機上的服務。所有訪問localhost:本地端口
的請求都會通過 SSH 隧道轉發到遠程主機的遠程端口。 -
SSH 隧道轉發請求:SSH 服務器接收到來自本地主機的請求,通過 SSH 隧道將這些請求轉發到遠程主機的遠程端口。
-
遠程主機處理請求:遠程主機上的服務接收并處理請求,然后將響應結果返回給 SSH 服務器,SSH 服務器再通過 SSH 隧道將結果返回給本地主機,最終用戶在本地主機上獲取到結果。
1.2 本地轉發應用場景
假設有一個數據庫服務器 dbserver.com,它的端口 3306 僅對內部網絡開放。你可以通過中轉服務器 sshserver.com 訪問該數據庫。
ssh -L 3306:dbserver.com:3306 user@sshserver.com
執行上述命令后,您可以通過訪問 localhost:3306
來連接到 dbserver.com
上的 MySQL 數據庫。
- 在本地計算機上運行
ssh -L 3306:dbserver.com:3306 user@sshserver.com
。 - 本地計算機在 localhost:3306 上監聽。
- 當本地應用程序連接到 localhost:3306 時,SSH 客戶端通過 SSH 隧道將請求轉發到 sshserver.com。
- sshserver.com 將請求轉發到 dbserver.com:3306。
- 數據庫服務器返回的響應通過相同的路徑返回到本地計算機。
二、打開外部訪問大門:SSH 遠程轉發
2.1 什么是 SSH 遠程轉發
SSH 遠程轉發(SSH Remote Port Forwarding)是一種通過SSH隧道在遠程服務器和本地計算機之間安全地轉發網絡流量的技術。它允許將遠程服務器上的某個端口的流量通過SSH隧道傳輸到本地計算機上的指定端口。這種方式通常用于在安全的 SSH 連接上訪問遠程服務器內網中的資源,而無需直接暴露這些資源。
-
用戶 A 發起連接:用戶A在本地主機上使用SSH命令發起遠程轉發連接。示例命令為:
# 該命令中,遠程端口是SSH服務器上的端口,本地主機是用戶A的本地計算機,本地端口是本地主機上的端口,用戶名是SSH服務器上的用戶名,SSH服務器是遠程SSH服務器的地址。 ssh -R 遠程端口:本地主機:本地端口 用戶名@SSH服務器
-
建立 SSH 連接:本地主機與 SSH 服務器之間建立 SSH 連接。這一步驟確保所有數據都通過安全的 SSH 隧道傳輸。
-
用戶 B 訪問服務:遠程主機上的用戶 B 試圖通過 SSH 服務器訪問本地主機上的服務。
-
請求轉發:SSH 服務器接收到用戶 B 的請求后,通過已建立的 SSH 隧道將請求轉發到用戶 A 的本地主機上的端口。
-
響應返回:本地主機將響應通過 SSH 隧道發送回 SSH 服務器,SSH 服務器再將響應轉發回遠程主機。
2.2 遠程轉發應用場景
假設你在本地計算機上運行了一個 Web 服務器(例如:localhost:80),希望通過中轉服務器 sshserver.com 讓遠程用戶訪問該 Web 服務器。
ssh -R 8080:localhost:80 user@sshserver.com
執行上述命令后,遠程用戶可以通過訪問 sshserver.com:8080
來連接到本地計算機上的 Web 服務器。
- 在本地計算機上運行
ssh -R 8080:localhost:80 user@sshserver.com
。 - SSH 服務器在 sshserver.com:8080 上監聽。
- 當遠程用戶連接到 sshserver.com:8080 時,SSH 服務器通過 SSH 隧道將請求轉發到本地計算機上的 localhost:80。
- 本地計算機返回的響應通過相同的路徑返回到遠程用戶。
三、動態轉發:SSH 讓你擁有自己的 VPN
3.1 什么是 SSH 動態轉發
SSH 動態轉發(SSH Dynamic Port Forwarding)是一種通過 SSH 隧道實現的代理功能,它允許在本地計算機上創建一個 SOCKS 代理服務器,從而使得所有通過這個代理的流量都通過 SSH 隧道加密并轉發到遠程服務器。與本地轉發和遠程轉發不同,動態轉發不需要預先指定目標主機和端口,而是可以動態地決定目的地,這使其更加靈活。
-
用戶發起連接:用戶在本地主機上使用 SSH 命令發起動態轉發連接。示例命令為:
# 該命令中,本地代理端口是本地計算機上打開的SOCKS代理端口,用戶名是SSH服務器上的用戶名,SSH服務器是遠程SSH服務器的地址。 ssh -D 本地代理端口 用戶名@SSH服務器
-
建立 SSH 連接:本地主機與 SSH 服務器之間建立 SSH 連接。這一步確保所有數據都通過安全的 SSH 隧道傳輸。
-
設置本地 SOCKS 代理:本地計算機在指定端口(例如 8080)上啟動一個 SOCKS 代理。任何發送到該端口的流量都會通過 SSH 隧道轉發到遠程服務器。
-
用戶配置應用程序:用戶配置需要通過代理訪問網絡的應用程序(如瀏覽器),使其使用本地 SOCKS 代理端口(例如 8080)。
-
應用程序發出請求:用戶在應用程序中訪問某個遠程服務器(例如訪問某個網站)。應用程序的請求首先發送到本地 SOCKS 代理端口。
-
請求轉發:本地計算機捕獲通過 SOCKS 代理端口的請求,通過已建立的 SSH 隧道將請求加密并轉發到 SSH 服務器。
-
SSH 服務器處理請求:SSH 服務器接收到請求后,根據請求中的目標地址和端口訪問遠程服務器。
-
遠程服務器處理請求并返回響應:遠程服務器接收請求后進行處理,生成響應數據,并將其返回給 SSH 服務器。SSH 服務器將響應數據通過 SSH 隧道加密并發送回本地主機。
3.2 動態轉發應用場景
假設你希望通過中轉服務器 sshserver.com 訪問多個遠程網站(例如:example.com)。可以在本地設置一個 SOCKS 代理。
ssh -D 1080 user@sshserver.com
執行上述命令后,可以配置瀏覽器或其他應用程序使用 localhost:1080
作為 SOCKS 代理,通過中轉服務器訪問任意遠程網站。
- 在本地計算機上運行 ssh -D 1080 user@sshserver.com。
- 本地計算機在 localhost:1080 上監聽。
- 應用程序通過 SOCKS 代理連接到 localhost:1080。
- SSH 客戶端根據請求的目標地址,通過 SSH 隧道將請求轉發到 sshserver.com。
- sshserver.com 將請求轉發到目標服務器(例如:example.com)。
- 目標服務器返回的響應通過相同的路徑返回到本地計算機。
四、小結
SSH 的本地轉發、遠程轉發和動態轉發功能為用戶提供了強大的網絡訪問和安全保障。這些功能不僅提升了網絡操作的靈活性,還增強了數據傳輸的安全性。掌握這些 SSH 技術,可以在日常工作中更加高效和安全地訪問各種網絡資源。
推薦閱讀
- 深入探究 Spring Boot Starter:從概念到實踐
- 深入理解 Java 中的 volatile 關鍵字
- OAuth 2.0:現代應用程序的授權標準
- Spring 三級緩存
- 深入了解 MyBatis 插件:定制化你的持久層框架