從 Mac 透過 SSH 連線到 WSL 2:設定與疑難排解

AIRouter Aug 30, 2026

若要從 Mac 透過 SSH 連進 WSL 2,需要在 Linux 發行版內安裝 SSH 伺服器,並建立 Mac 到該伺服器的網路路徑。只在 Windows 安裝 SSH,連到的是 Windows,而不是 WSL 開發環境。

本指南使用 Windows 電腦上的 Ubuntu,以及同一個區域網路中的 Mac。請將範例使用者名稱和位址換成自己的資料。伺服器端檢查清單請參閱 WSL SSH 伺服器疑難排解。

先選擇網路路徑

Windows 設定 連線路徑
使用預設 NAT 網路的 WSL 2 將 Windows 區域網路連接埠轉送至 WSL 內的 SSH 連接埠
使用 mirrored networking 的受支援 Windows 11 安裝 測試直接區域網路連線,並設定適用的防火牆規則

Microsoft 說明了 NAT 和 mirrored networking。Windows 11 22H2 或更新版本提供 mirrored networking。不要假設所有 WSL 安裝都使用相同網路模式,也不要假設 mirrored networking 一定無法使用。

1. 在 Ubuntu 內安裝並啟動 SSH

請在 Ubuntu 而不是 PowerShell 中執行:

sudo apt update
sudo apt install openssh-server
sudo sshd -t
sudo service ssh start
ss -ltn | grep ':22'

設定檢查應在沒有錯誤的情況下完成。最後一個指令應顯示連接埠 22 正在監聽。如果 Ubuntu 使用 systemd,也可以執行 sudo systemctl status ssh 管理服務。Ubuntu 的 OpenSSH 文件說明了安裝和設定方式。

執行 whoami 查看 Linux 使用者名稱,SSH 連線時會用到這個帳戶。現在啟動伺服器,不代表 Windows 重新開機後服務會自動啟動;等連線正常後,再另外測試這件事。

2. 先測試 Windows → WSL,再加入 Mac

在 PowerShell 中列出發行版並查看位址:

wsl -l -v
wsl -d Ubuntu hostname -I

接著連到相關的 WSL 位址:

ssh your_linux_user@172.30.98.229

上方位址只是範例。如果 hostname -I 列出多個位址,請檢查 Ubuntu 的網路介面,使用打算轉送流量的那個網路位址。在此步驟連線失敗,代表 SSH 或 Windows 到 WSL 的路徑有問題;設定 Mac 不會修好這個問題。

3. NAT 模式:轉送專用的 Windows 連接埠

使用 ipconfig 找出 Windows 電腦的區域網路位址。以下範例使用 192.168.1.50,並開放連接埠 2222,保留 Windows 的 22 埠供另一個 Windows SSH 伺服器使用。

在系統管理員 PowerShell 中執行:

$WindowsLanIp = '192.168.1.50'
$WslIp = ((wsl -d Ubuntu hostname -I).Trim() -split '\s+')[0]

netsh interface portproxy add v4tov4 listenaddress=$WindowsLanIp listenport=2222 connectaddress=$WslIp connectport=22

New-NetFirewallRule -DisplayName 'WSL SSH LAN 2222' -Direction Inbound -Action Allow -Protocol TCP -LocalPort 2222 -RemoteAddress LocalSubnet

netsh interface portproxy show all

執行轉送指令前,先確認選用的 WSL 位址。Microsoft 文件說明了 netsh interface portproxy,包括新增、顯示和刪除規則。

Windows 區域網路位址和 WSL NAT 位址都可能改變。如果重新啟動後連線失效,請將目前位址與轉送規則比對。更新規則即可,不要不斷新增已過期的規則。若此設定只供區域網路使用,不要在網際網路路由器上對外開放此連接埠。

4. 從 macOS 測試 SSH

在 Mac 上開啟終端機:

ssh -p 2222 your_linux_user@192.168.1.50

接受新的主機前,先確認伺服器的主機金鑰指紋。連線成功時應會開啟 Linux Shell。執行 uname -a 和 pwd,確認你連到預期的環境。

若要重複使用,將以下項目加入 Mac 的 SSH 設定檔:

Host windows-wsl
    HostName 192.168.1.50
    User your_linux_user
    Port 2222

現在測試 ssh windows-wsl。停用密碼驗證前,先設定金鑰驗證;變更存取設定時,保留一個仍可使用的工作階段。

5. 將 VS Code 連到可用的 SSH 主機

安裝 Microsoft 的 Remote - SSH 擴充功能。執行 Remote-SSH: Connect to Host…,選取 windows-wsl,再開啟 Linux 發行版內的目錄。

VS Code 會在目標環境安裝遠端伺服器。先建立終端機連線,可以把網路問題和編輯器問題分開處理。先決條件和安裝失敗的解決方式,請參閱官方 Remote SSH 指南。

使用 mirrored networking 時有什麼不同?

在受支援的 mirrored 設定下,測試從 Mac 直接連至 Windows 電腦的區域網路位址和 Linux SSH 連接埠。Windows 和 Hyper-V 防火牆政策仍可能阻擋連入流量。請依 Microsoft 網路文件設定範圍明確的連入規則,不要為了測試連線而停用防火牆。

在 Windows 上連 localhost 成功,不能證明另一台電腦也能連到服務。請直接從 Mac 測試。

依失敗的環節排查

症狀 下一步檢查
Connection refused SSH 監聽狀態、目的位址、轉送規則和所選連接埠
Connection timed out 區域網路連線、Windows 防火牆、VPN 路由和網路隔離
Permission denied Linux 使用者名稱、驗證方式和 authorized key
重新開機前可用 WSL 服務狀態及 Windows/WSL 位址是否變更
終端機可用,VS Code 失敗 遠端伺服器先決條件和 VS Code 連線記錄

使用 ssh -vvv windows-wsl 診斷連線。Linux 服務和驗證檢查可接著參閱 WSL SSH 疑難排解指南。

常見問題

Mac 可以直接連到 WSL NAT 位址嗎?

在預設設定下,無法透過一般區域網路路徑直接連線。請使用可連到的 Windows 端點並設定轉送,或設定適合的替代網路路徑。

我也需要安裝 Windows OpenSSH Server 嗎?

上述轉送方式不需要:SSH 伺服器是在 Ubuntu 內執行。若你刻意採用透過 Windows 的 SSH 跳板主機設計,才需要另外安裝 Windows SSH 伺服器。

為什麼 WSL 位址會改變?

請將 NAT 位址視為動態位址。發行版重新啟動後查看目前位址,必要時更新轉送目的地。