如何科学快速地在异地连上 Windows 上的 WSL
人在外面,突然想连家里 Windows 上的 WSL。没有公网 IP,远程桌面又不想开,最省事的办法就是 frp。
我这篇只讲一个目标:从异地 SSH 进 WSL。

什么是 frp
frp 是一个内网穿透工具。
你需要一台有公网 IP 的服务器跑 frps,家里或公司内网机器跑 frpc。外部访问公网服务器某个端口,流量会被 frp 转回内网机器。
这次我们要做的是:
公网服务器:6001 -> 内网 Windows 机器里的 WSL:2222然后外面直接:
ssh tim@公网IP -p 6001就进 WSL 了。
WSL 的配置
第一个坑是 22 端口。
Windows 自己可能已经占了 22,WSL 里再开 SSH 很容易打架。所以我一般让 WSL 的 sshd 监听 2222。
sudo apt updatesudo apt install openssh-server -ysudo vim /etc/ssh/sshd_config改成:
Port 2222PasswordAuthentication yes重启:
sudo service ssh --full-restartss -tlnp | grep 2222确认 WSL 本机能连:
再配 frpc.toml:
server_addr = "你的公网服务器IP"server_port = 7000
[wsl-main-ssh]type = "tcp"local_ip = "127.0.0.1"local_port = 2222remote_port = 6001这里别搞反:
local_port = 2222,WSL 里 sshd 的端口remote_port = 6001,外面访问公网服务器的端口
多台机器也简单,每台机器用不同名字和不同公网端口:
[wsl-lab-ssh]remote_port = 6002穿透的持续性
这个东西最怕断。因为一旦断了,你人在外地,内网机器又连不上,就只能等回去修。
我的小建议:
第一,frpc 别手动跑,尽量做成开机自启。WSL 里可以用 systemd,Windows 侧也可以用任务计划程序拉起脚本。
第二,SSH 尽早换成密钥登录。密码能调通,但长期裸奔不舒服。
ssh-keygen -t ed25519把公钥放到 WSL:
~/.ssh/authorized_keys确认密钥能登录后,再关密码:
PasswordAuthentication no第三,公网服务器安全组、防火墙、frps 端口要一次性放对。至少要放:
7000 frpc 连接 frps6001 外部 SSH 入口第四,给每台机器留一个独立端口,别复用,别临时改。比如主力机 6001,实验机 6002。人在外面排查端口冲突很痛苦。
第五,如果这台 WSL 很重要,可以准备第二条路,比如 Tailscale、ZeroTier、RustDesk 或 Windows 远程桌面。frp 很好用,但远程访问这件事,最好别只有一根绳子。
最后再记一句:先在同一局域网里把 WSL SSH 调通,再上 frp。不要一开始就公网调试,不然你会分不清是 sshd、frpc、frps、防火墙,还是安全组的问题。