如何設置 SSH 隧道 – Linux 技術博客


連接不同網絡上的不同 Linux 設備需要將它們暴露在公共互聯網上,這可能會使您的系統和文件面臨風險。因此,SSH 隧道用於將數據從源計算機快速安全地傳輸到客戶端計算機,反之亦然。

SSH 隧道是一種在服務器機器和客戶端機器之間創建安全且加密的 SSH 連接的方法,通過該連接可以傳輸數據和中繼服務。在今天的文章中,我將向您展示如何設置 SSH 隧道並通過它安全地路由流量。

什麼是 SSH 隧道?

SSH 隧道是一種通過加密通道發送未加密流量或數據的方法。簡而言之,它是一條將數據從一個地方安全地傳輸到另一個地方的隧道。除了文件傳輸之外,您還可以使用 SSH 隧道訪問內網服務並實現跨防火牆的 VPN。

SSH 隧道,也稱為 SSH 轉發,是一種使用加密協議 (FTP) 傳輸數據、繞過防火牆和訪問受地理限制的內容的簡單有效的方法。

SSH 端口轉發的三種類型:

  1. 本地端口轉發
  2. 遠程端口轉發
  3. 動態端口轉發

本地轉移

本地轉發是一種將端口從客戶端機器(本地 SSH 客戶端)轉發到遠程機器(SSH 服務器),然後將連接轉發到目標機器上的另一個端口的方法。

SSH 客戶端檢查特定特定端口上的連接,當它收到連接請求時,它會通過隧道連接到遠程 SSH 服務器上的特定端口。然後服務器連接到配置端口上的另一台目標機器。

它主要用於從外部連接到內部網絡上的遠程服務,例如數據庫。它還用於通過 Internet 進行遠程文件共享和跳轉服務器。

如何配置本地端口轉發

例如,假設您的防火牆限制了在遠程服務器上的端口 3000 上運行的應用程序。現在轉發本地端口(即 8080)以在本地訪問應用程序。

這個 -L 用於配置本地端口轉發

ssh [email protected] -L 8080:server1.example.com:3000 

ssh -L [LOCAL_IP:]LOCAL_PORT:DESTINATION:DESTINATION_PORT [[email protected]]SSH_SERVER
  • [LOCAL_IP:]本地端口 – 本地機器的端口號和 IP 地址。 可以使用任何大於 1024 的端口號。
  • 目的地:DESTINATION_PORT – 目標機器的端口和 IP 地址或主機名。
  • [[email protected]]服務器_IP – 遠程 ssh 用戶的用戶名和服務器 IP 地址。

這個 -f 告訴 ssh 在後台運行。

ssh -f -N [email protected] -L 8080:server1.example.com:3000

什麼時候 -N 告訴不要運行遠程命令。 [you will not get a shell in this case.]

ssh -N [email protected] -L 8080:server1.example.com:3000

現在,在本地計算機上打開瀏覽器,而不是使用地址 server.example.com:3000 訪問它,您可以使用 localhost:8080 訪問遠程應用程序。

遠程傳輸

遠程端口轉發與本地端口轉發相反,允許遠程機器連接到本地計算機。默認情況下,SSH 不支持遠程端口轉發。所以你必須在你的 ssh 配置文件中啟用它。

以編輯模式打開 ssh 配置文件

sudo vim /etc/ssh/sshd_config 

搜索 GatewayPorts 並將其設置為 yes。

GatewayPorts yes

保存更改,退出編輯模式,然後重新啟動服務器。

sudo systemctl restart sshd

現在啟用了遠程端口轉發。 Open SSH 使用 -R 命令配置遠程端口轉發。

ssh -R [REMOTE:]REMOTE_PORT:DESTINATION:DESTINATION_PORT [[email protected]]SSH_SERVER
  • [REMOTE:]遠程端口 – 遠程 SSH 服務器的 IP 地址和端口號。
  • 目的地:DESTINATION_PORT – 目標機器的主機名和 IP 地址。
  • [[email protected]]服務器_IP – 遠程 SSH 用戶名和 IP 地址。

例如:

ssh -R 8080:127.0.0.1:3000 -N -f [email protected] 

SSH 服務器偵聽端口 8080 並將所有流量從 8080 隧道傳輸到本地計算機上的端口 3000。

或者,您可以使用以下命令將遠程計算機上的端口 5000 轉發到本地計算機上的端口 3000:

ssh -f -N [email protected] -R 5000:localhost:3000 

遠程端口轉發主要用於允許某人從外部訪問內部服務。

動態端口轉發

第三種也是最後一種端口轉發是動態端口轉發。本地和遠程端口轉發允許您通過隧道連接單個端口進行通信,而動態端口轉發允許您運行不同端口並與之通信。

在本地機器上創建一個套接字作為 SOCKS 代理服務器或將本地機器配置為 SOCKS 代理服務器,默認監聽 1080 端口。當服務器連接到這個端口時,它會被轉發到遠程機器,並通過動態端口到動態機器。

什麼是襪子?

這是一個 Internet 協議,它定義了客戶端計算機如何通過代理連接到服務器。

您可以使用 -D 選項啟用動態端口轉發。讓我們用一個例子來理解端口轉發 –

ssh -D [LOCAL_IP:]LOCAL_PORT [[email protected]]SSH_SERVER
  • [LOCAL_IP:]本地端口 – 本地機器的 IP 地址和端口號。
  • [[email protected]]服務器_IP – 遠程服務器的 IP 地址和用戶名。

或者,此命令啟動 SOCKS 代理並允許您連接到遠程主機。

ssh -f -N -D 1080 [email protected] 

結論是

SSH 隧道是一種通過加密隧道發送未加密數據的便捷方式。它提供了三個選項,您可以根據需要進行選擇。