外部访问 Windows WSL 交互式 Shell 全流程

24 天前(已编辑)
/ ,
32

外部访问 Windows WSL 交互式 Shell 全流程

1. 前提说明

  • 目标环境:Windows 服务器,运行 WSL2(默认使用 NAT 网络,WSL 有独立虚拟 IP)。
  • 需求:从外部计算机远程 SSH 访问 WSL Shell。
  • 关键点:
    • WSL2 的 IP 通常是内网 NAT 地址,不直接暴露。
    • 需通过宿主机做端口转发并开放防火墙端口。
    • 配置 WSL 内 SSH 服务并允许登录。

2. WSL 内配置 SSH 服务

openssh 服务

sudo apt update
sudo apt install openssh-server
sudo service ssh start

检查 SSH 服务状态

sudo service ssh status

创建用户

useradd -m <username>  # 创建用户并创建home目录

passwd <username> # 给新用户设置密码

如果需要root远程,需要配置sshd_config

编辑配置

sudo nano /etc/ssh/sshd_config

修改或添加以下行:

PermitRootLogin yes
PasswordAuthentication yes

设置 root 密码

sudo passwd root

重启 SSH 服务:

sudo service ssh restart

3. Windows 宿主机端口转发

获取 WSL IP 地址

wsl 操作

ip addr | grep eth0
# inet 172.18.100.193/20

window 操作

  • 绑定到宿主机 2222 端口 为例
  • WSL_IP 对应上面获取的 ip
netsh interface portproxy add v4tov4 listenport=2222 connectaddress=<WSL_IP> connectport=22

宿主机放行防火墙端口

New-NetFirewallRule -DisplayName "Allow WSL SSH" -Direction Inbound -LocalPort 2222 -Protocol TCP -Action Allow

之后便可以远程到目标主机上的 WSL

ssh <wsl用户名>@<宿主机IP> -p 2222

4. 常见故障排查

端口无法访问

宿主机确认端口监听:

netstat -ano | findstr 2222
netsh interface portproxy show all

确认 WSL SSH 服务正常运行:

sudo service ssh status

ping 不通宿主机

Windows 默认禁用 ICMP 请求,ping 不通不代表 TCP 端口不可用。

直接用端口测试命令确认连通性:

Linux/macOS:

nc -zv <宿主机IP> 2222

Windows PowerShell:

Test-NetConnection -ComputerName <宿主机IP> -Port 2222

WSL IP 每次重启可能变化,每次重启 WSL 需要重新执行端口转发命令。

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...