在 wsl 中隔離 Linux 發行版(ubuntu 18.04 和 20.04)

在 wsl 中隔離 Linux 發行版(ubuntu 18.04 和 20.04)

在 Windows 10 中,我使用 WSL 安裝了 2 種類型的 linux 發行版 ubuntu 18.04 和 ubuntu 20.04。我想為 ssh 連接埠 22 配置 20.04 ,為 ssh 連接埠 2222 配置 18.04 。進行這些更改會影響任一發行版嗎?

當我們安裝這些發行版時,它們是相互隔離的還是會相互影響?

答案1

您可以在任一(或兩個)系統上根據需要變更 SSH 連接埠。不會有任何影響;您的系統將在更改後的連接埠設定下正常運作。

SSH 是為了你的與系統的交互。沒有內部流程使用它。 Ubuntu Desktop 的原生安裝甚至根本沒有 SSH 伺服器。

答案2

好吧,有一個“簡單的答案”可以回答您的問題,但可能並沒有真正幫助您那麼多。然後是「在 WSL 上運行 SSH 伺服器真正需要做什麼」。

簡單的答案,正如其他人已經說過的那樣——每個實例都可以相對隔離地操作自己的 SSH 伺服器。

更長的答案......是複雜的。在 WSL 上運行 SSH 伺服器是一回事。實際上能夠遠端連接到它完全是另一回事。您必須擔心連接埠轉送、防火牆和服務啟動(在沒有 systemd 的情況下 WSL 無法做好這些事情)。

首先,了解 WSL 中 ssh 的用例會很有幫助。

如果您只想遠端存取您的實例,那麼我發現最簡單的方法是安裝 Windows 10 OpenSSH 伺服器在主機本身。完成此操作後,您需要做的唯一實際配置是開啟 Windows 防火牆上的連接埠 22。上面連結的 Microsoft 安裝說明中包含了這一點。

在 Windows 中安裝 OpenSSH 伺服器後,您可以使用:

ssh -t <user@windows_host_or_ip> wsl -d <wsl_instance_name>

....到達您的 WSL 實例。-d <wsl_instance_name>您的預設 WSL 實例不需要。

但也許您還有其他原因需要透過 SSH 存取 WSL 執行個體。例如,我使用 Ansible 跨多台電腦連線並設定一些 WSL 實例。這需要為每個實例運行一個「真正的」SSH 伺服器。

在這種情況下,您需要提出以下解決方案:

  • 從 Windows 主機到 WSL2 執行個體的連接埠轉送(WSL1 不需要連接埠轉發,因為其網路與 Windows 網路介面「橋接」運作。)
  • 在每個實例中啟動sshd服務(不是自動的)

在我看來,這裡最簡單的解決方案仍然是在連接埠 22 上安裝 Windows OpenSSH 伺服器,然後也使用自己的 OpenSSH 伺服器配置每個 WSL 實例,但(當然)在不同的連接埠上。然後,您可以使用 Windows 主機作為「跳轉主機」來存取其中的執行個體。詳細說明可以在以下位置找到這個答案關於超級用戶。

這也解決了「sshd在 WSL problem, because you can use a syntax similar to the earlier one I mentioned (using thewsl` 命令中啟動透過Windows ssh)遠端啟動服務。換句話說,只要將 Windows SSH 伺服器設定為自動啟動,您就可以使用它來啟動任何 WSL 執行個體的 SSH 伺服器。再次,詳細資訊可以在該答案中找到。

另外值得一讀的是這個答案關於 WSL 中一般連接埠轉送場景的超級使用者。

相關內容