WSL SSH 伺服器連不上?分層排查與網路設定

AIRouter Oct 9, 2026

在 WSL 裡可以成功執行 SSH 指令,不代表其他電腦也能連進來。請分別測試 SSH 伺服器、Windows 主機和遠端用戶端。按順序檢查有助於先定位故障,再決定是否調整設定,避免一次改動多項設定。

本指南使用 WSL 2 上的 Ubuntu。若要了解從 Mac 連線的完整流程,請參閱從 Mac 連線到 WSL 2。

在 Ubuntu 內安裝並測試伺服器

在你打算連線使用的 Linux 發行版中安裝伺服器:

sudo apt update
sudo apt install openssh-server
sudo sshd -t

最後一個指令會檢查設定。重新啟動 SSH 前,請先修正回報的錯誤。若發行版已啟用 systemd:

sudo systemctl enable --now ssh
sudo systemctl status ssh --no-pager

如果沒有 systemd,請執行 sudo service ssh start 啟動服務。使用 ss -ltn 檢查是否有連接埠監聽,接著在 Ubuntu 內執行 ssh YOUR_LINUX_USER@localhost 測試。請用 Linux 帳戶名稱取代 YOUR_LINUX_USER,不要填 Windows 帳戶。這些指令依據 Ubuntu 的 OpenSSH 文件。

先從 Windows 測試,再測其他電腦

在 Windows 終端機執行:

ssh YOUR_LINUX_USER@localhost

若 Windows 也有執行 SSH 伺服器,請確認實際連到哪一台伺服器。登入後執行 uname -a,確認工作階段是在 Linux。若成功登入的是 Windows,可能會讓你誤以為 WSL 伺服器也能從外部連線。

每次測試都記下確切的目的地主機、連接埠、使用者名稱和錯誤訊息。比對這四項資料,比反覆重新安裝 OpenSSH 更有助於排查。

選擇正確的 WSL 網路路徑

使用 NAT 時,其他電腦必須經由 Windows 轉送連線,才能到達 WSL 執行個體。Microsoft 文件說明可使用 netsh interface portproxy 進行連接埠轉送;以 wsl.exe hostname -I 查看目前 WSL 位址,並用 netsh interface portproxy show all 檢查現有轉送規則。若重啟 WSL 後連線中斷,目的位址過期是值得檢查的原因之一。

在受支援的 Windows 11 系統上,也可改用 mirrored networking。Microsoft 文件要求 Windows 11 22H2 或更新版本,並在 .wslconfig 設定:

[wsl2]
networkingMode=mirrored

使用這種模式時,也要檢查 Hyper-V 防火牆規則。請只允許 SSH 所需的連接埠,不要停用防火牆。請依 Windows 版本參閱 Microsoft 的 WSL 網路指示。

先解讀錯誤,再變更設定

結果 下一步檢查
Connection refused SSH 是否正在目的連接埠監聽?連到正確主機了嗎?
Connection timed out 檢查網路路由、連接埠轉送和相關防火牆規則。
Permission denied 伺服器已回應;檢查 Linux 使用者名稱、金鑰和驗證設定。
Host key changed 確認主機或發行版是否重建,再決定是否替換已儲存的金鑰。

執行 ssh -v YOUR_LINUX_USER@DESTINATION 查看連線在哪個階段失敗。簡短記錄最後成功的節點。例如:「Ubuntu 的 localhost 可連,Windows 的 localhost 可連,Mac 連 Windows IP 逾時」代表應將排查重點放在外部網路路徑。

讓可用設定容易重現

連線成功後,記下網路模式、伺服器連接埠、轉送目的地及允許的用戶端網路。停用密碼驗證前,先測試金鑰驗證;重新啟動服務前,先驗證 SSH 設定。直到第二個工作階段也成功前,請保留第一個工作階段。