在 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 the
wsl` 命令中啟動透過Windows ssh)遠端啟動服務。換句話說,只要將 Windows SSH 伺服器設定為自動啟動,您就可以使用它來啟動任何 WSL 執行個體的 SSH 伺服器。再次,詳細資訊可以在該答案中找到。
另外值得一讀的是這個答案關於 WSL 中一般連接埠轉送場景的超級使用者。