SSH / WSL 连接排障记录

目标

  • 通过 SSH 或其他方式连接远程计算机。
  • 连接成功后进入该计算机上的 WSL。

方案 A:先连远程 Windows,再进入 WSL(推荐)

  1. 远程 Windows 启用 OpenSSH Server。
  2. 放行 22 端口(防火墙)。
  3. 本机执行:
    ssh <WINDOWS_USER>@<REMOTE_WINDOWS_IP>
  4. 登录后执行:
    wsl
  5. 多发行版时可执行:
    wsl -d <DISTRO_NAME>

优点:稳定、维护成本低。

方案 B:直接 SSH 到远程 WSL

  1. 在 WSL 中安装并启动 SSH 服务:
    sudo apt update
    sudo apt install -y openssh-server
    sudo service ssh start
  2. 如 22 端口冲突,改用 2222:
    sudo sed -i ‘s/^#?Port .*/Port 2222/’ /etc/ssh/sshd_config
    sudo sshd -t
    sudo systemctl restart ssh
  3. 验证监听:
    ss -lntp | grep :2222
  4. 从本机连接:
    ssh <WSL_USER>@<REMOTE_WINDOWS_IP> -p 2222

mirrored networking 配置(WSL2)

在 Windows 用户目录创建或编辑 .wslconfig:

[wsl2]
networkingMode=mirrored
dnsTunneling=true
autoProxy=true

[experimental]
hostAddressLoopback=true

生效方式:

  • 在 Windows 执行:wsl --shutdown
  • 重新启动 WSL

常见报错与处理

1) Address already in use

原因:端口被占用(常见为 Windows sshd 占用 22)。
处理:

  • 保留 Windows 22,WSL 改 2222(推荐);或
  • 停用 Windows sshd,让 WSL 使用 22。

2) Missing privilege separation directory: /run/sshd

处理:

  • sudo mkdir -p /run/sshd
  • sudo chmod 755 /run/sshd
  • sudo sshd -t

3) Connection timed out / DestinationHostUnreachable

结论:多为网络层不可达(客户端隔离/VPN 策略/路由问题),不是 sshd 本身问题。
处理:

  • 先做 Test-NetConnection 双端测试。
  • 检查 Windows 防火墙与 Hyper-V 规则。
  • 必要时改用内网中继方案(如 Tailscale/ZeroTier)。

Tailscale 最短实施清单

  1. 两台 Windows 安装并登录同一 Tailscale 账号。
  2. 获取远程机 Tailscale IP(通常为 100.x.x.x)。
  3. 先测试远程 Windows 22 端口:
    Test-NetConnection <TAILSCALE_IP> -Port 22
  4. 连接远程 Windows:
    ssh <WINDOWS_USER>@<TAILSCALE_IP>
  5. 登录后进入 WSL:
    wsl
  6. (可选)直连 WSL:
    ssh <WSL_USER>@<TAILSCALE_IP> -p 2222

日常使用建议(教室 -> 寝室)

  1. 统一走 Tailscale + MagicDNS,避免记动态 IP。
  2. 配置 SSH Host 别名,减少手敲命令。
  3. 仅使用密钥登录,关闭密码登录。
  4. 远程主机关闭自动睡眠,确保网络稳定。
  5. 预留应急入口(远程桌面或其他远控)。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐