Skip to content
Go back

SSH 连接 WSL 与 Mac

Published:  at  10:00 AM

目录

1 同一局域网下

同一局域网内从 Mac 远程连接到 Windows 上的 WSL2(Windows Subsystem for Linux)环境

1.1 WSL2 中配置 SSH 服务

1.1.1 修改apt清华镜像

修改为清华镜像方便接下来的安装过程,如果有🪜可以忽略此步

sudo sed -i "s@http://.*archive.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list
sudo sed -i "s@http://.*security.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list
sudo apt update && sudo apt upgrade -y

1.1.2 安装 OpenSSH Server

在 WSL2 中打开终端,执行以下命令:

sudo apt update
sudo apt install openssh-server

1.1.3 配置 SSH 服务

编辑 SSH 配置文件:

sudo vim /etc/ssh/sshd_config

确保以下行存在且未被注释(即没有 # 号):

Port 2222
AddressFamily any
ListenAddress 0.0.0.0
PermitRootLogin yes
PasswordAuthentication yes
PubkeyAuthentication yes

1.1.4 启动 SSH 服务

执行以下命令启动 SSH 服务:

sudo service ssh start

1.1.5 配置开机自启

在每次启动 WSL 时自动启动 SSH 服务,需要在 WSL 的配置文件中添加启动命令。

1.2 Windows 上设置 SSH 与端口转发

由于 WSL2 使用虚拟网络,默认情况下无法直接从局域网访问其服务。因此,需要在 Windows 上设置端口转发,将外部请求转发到 WSL2 的 SSH 服务。

1.2.1 端口转发

PowerShell 中执行以下命令:

wsl hostname -I

记录输出的 IP 地址,假设为 172.28.112.1。

1.2.2 在 Windows 上安装 OpenSSH server

通过 PowerShell 安装(管理员权限):

# 检查是否已安装 OpenSSH 客户端和服务器
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'

# 安装 OpenSSH 服务器
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

# 如果失败,可以改用 DISM 命令
dism /online /Add-Capability /CapabilityName:OpenSSH.Server~~~~0.0.1.0

1.2.3 启动并配置 SSH 服务

# 启动 SSH 服务
Start-Service sshd

# 设置 SSH 服务开机自启
Set-Service -Name sshd -StartupType 'Automatic'

# 检查服务状态
Get-Service sshd

1.2.4 配置防火墙(允许 SSH 端口 2222)

# 允许 2222 端口
New-NetFirewallRule -Name "OpenSSH-Server" -DisplayName "OpenSSH Server (TCP 22)" -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 2222

1.2.5 测试 SSH 连接

ipconfig

查找与当前连接的网络适配器对应的 IPv4 地址,假设为 192.168.1.100。

ssh <wsl_username>@192.168.1.100 -p 2222

将 <wsl_username> 替换为 WSL2 中的用户名。如果配置正确,应该能够成功连接到 WSL2 的终端

2 非同一局域网

2.1 Windows 安装

winget install tailscale

2.2 macOS 安装

brew install tailscale

Tailscale 上显示的 IP 地址即远程登录地址,其余配置方法与同一局域网内的方法相同。

⚠️ 免密登陆

# 生成密钥(如果还没有)
ssh-keygen -t ed25519

# 复制公钥到WSL
ssh-copy-id -p 2222 zoukai@IP

📨 自动脚本

@echo off
:: 启动WSL SSH服务
wsl -d Ubuntu -u root /etc/init.d/ssh start

:: 获取WSL2动态IP并设置端口转发
for /f "tokens=*" %%i in ('wsl hostname -I') do (
    netsh interface portproxy reset
    netsh interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=2222 connectaddress=%%i
)

:: 放行防火墙(幂等操作)
powershell -command "New-NetFirewallRule -Name 'WSL2_SSH' -DisplayName 'WSL2 SSH' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 2222 -ErrorAction SilentlyContinue"

echo 已启动SSH并设置端口转发,WSL IP: %errorlevel%
pause

Suggest Changes
Share this post on:

Next Post
Docker for AI 教程