WSL远程连接失败需先确认使用WSL2并启用OpenSSH服务,正确安装Remote-WSL插件而非Remote-SSH,配置终端默认shell与路径映射,设置Git的core.autocrlf为input以避免换行符问题。
WSL 远程连接失败:先确认 WSL2 和 OpenSSH 是否就位
vscode 无法连接 wsl,大概率不是 vscode 的问题,而是底层环境没配好。必须确保你用的是 wsl2(wsl -l -v 查看),且已安装并启用了 openssh-server。windows 自带的 openssh 服务(sshd)和 wsl 内部的 sshd 是两回事——vscode remote-wsl 插件默认走的是 wsl 内部的 ssh 服务,但多数人误以为只要 windows 开了 ssh 就行。
实操建议:
- 运行
wsl -u root service ssh status,若提示inactive,则执行service ssh start;为免每次重启手动开,可加到/etc/wsl.conf中:[boot] command="service ssh start" - 检查
/etc/ssh/sshd_config是否含ListenAddress 127.0.0.1:22(默认通常已设好),禁止改成本机 IP 或0.0.0.0,否则可能触发 Windows 防火墙拦截 - 确认用户有密码(
passwd $USER),因为 VSCode 默认不支持无密码密钥登录(除非显式配置remote.SSH.enableAgentForwarding)
Remote-WSL 插件 vs Remote-SSH 插件:别装错
这是最常踩的坑:看到“远程”就下 Remote-SSH,结果连不上 WSL。VSCode 官方对 WSL 有专用插件 Remote-WSL,它不走 SSH 协议,而是通过 WSL 的 localhost 套接字直连,启动快、权限干净、能直接访问 Windows 文件系统(如 /mnt/c/Users/xxx)。
实操建议:
- 卸载
Remote-SSH(除非你真要用 SSH 方式连 WSL,比如跨机器调试) - 在扩展市场搜
Remote-WSL,安装后重启 VSCode - 打开命令面板(
Ctrl+Shift+P),输入WSL: New Window,就能新开一个专属于当前 WSL 发行版的窗口;或用WSL: Reopen in WSL把当前 Windows 下打开的文件夹切换进 WSL 环境
路径映射与终端默认 shell:别让 bash 启动失败
即使成功进入 WSL 窗口,终端可能卡在 bash: command not found 或始终显示 Windows 的 cmd.exe。这是因为 VSCode 没正确识别 WSL 的默认 shell,或 $PATH 被 Windows 环境变量污染。
实操建议:
- 在 WSL 终端中运行
echo $SHELL,确认是/bin/bash或/usr/bin/zsh;然后在 VSCode 设置里搜terminal.integrated.defaultProfile.linux,设为对应路径(如/bin/bash) - 检查
~/.bashrc或~/.zshrc是否有 Windows 风格路径导出(如export PATH="/c/Users/xxx/bin:$PATH"),这类写法在 WSL 中无效,应改为/mnt/c/Users/xxx/bin - 若打开文件夹后左侧资源管理器仍显示 Windows 路径(如
C:\Users\xxx\project),说明没真正切换到 WSL 上下文——必须用WSL: Reopen in WSL,而非单纯在 WSL 终端里code .
文件权限与 Git 提交失败:WSL 中的 core.autocrlf 很关键
在 WSL 环境下用 VSCode 编辑文件,Git 提交时经常报 “LF will be replaced by CRLF”,甚至某些脚本因换行符损坏而执行失败。这不是 VSCode 的 bug,而是 WSL 的 git 默认沿用 Windows 的 core.autocrlf=true 行为,但它实际运行在 Linux 内核上,该设置会反向污染。
实操建议:
- 在 WSL 终端中执行:
git config --global core.autocrlf input(Linux 推荐值),再执行git config --system core.autocrlf false彻底禁用系统级覆盖 - 检查
git config --list --show-origin,确认没有 Windows Git 安装目录下的配置项干扰 - 若项目中已有混杂换行符,运行
git add --renormalize .重置索引,再提交
WSL 的文件系统桥接看似透明,但权限位(如 chmod +x)、符号链接、大小写敏感这些细节,在 Windows 主机侧不可见,也容易被 VSCode 的缓存忽略——遇到奇怪的执行失败或文件未变更提示,先 ls -l 看真实权限,别只信资源管理器里的图标。










