6月18日 23:40

VS Code 远程开发如何配置 SSH、容器和 WSL?

如果你经常遇到“本地能跑,服务器上跑不了”“Windows 路径和 Linux 权限打架”“团队每个人 Node、Python、Docker 版本都不一样”,VS Code 远程开发能省掉不少环境折腾。

它的工作方式很直接:VS Code 界面仍在本地,代码、终端、语言服务、调试器可以运行在 SSH 服务器、Docker 容器或 WSL 里。也就是说,你看到的是本地编辑器体验,实际执行环境却贴近生产或项目约定的开发环境。

先判断该用哪种远程开发模式

VS Code 远程开发常见有三种入口,不建议一上来全装全配,先按场景选。

模式适合场景主要依赖典型优势
Remote SSH代码和服务在远程 Linux 服务器上SSH 服务、远程账号接近线上环境,适合后端、算法、运维开发
Dev Containers项目希望用容器固定依赖版本Docker、.devcontainer 配置团队环境一致,换电脑也容易恢复
WSLWindows 用户需要 Linux 开发环境WSL 2、Linux 发行版比虚拟机轻,适合前端、Node、Python、Go 等项目

一句话选择:已有远程服务器就用 Remote SSH;想把项目依赖锁进容器就用 Dev Containers;Windows 本机开发 Linux 项目优先用 WSL。

Remote SSH 如何配置

Remote SSH 的重点不是“远程同步文件”,而是 VS Code 会在远程机器上安装一个 VS Code Server。你打开的文件、运行的终端、语言服务都在远程机器上执行,本地只负责显示界面。

远程机器需要先满足这些条件

连接前先确认几件事,比反复重装扩展更省时间:

  • 远程服务器开启了 SSH 服务,端口能从本机访问。
  • 远程账号有可写的 home 目录,VS Code Server 默认会装到 ~/.vscode-server
  • 磁盘空间不能太紧张,语言服务、扩展和缓存会占用一定空间。
  • Shell 环境正常,登录后能执行基础命令,如 shtaruname
  • 如果服务器在公司内网或云厂商安全组后面,要先放通对应端口。

本地安装扩展并配置 SSH 主机

在 VS Code 扩展市场安装 Remote - SSH。如果你安装的是 Remote Development 扩展包,也会包含它。

然后编辑本机 SSH 配置文件:

sshconfig
Host dev-linux HostName 192.168.1.100 User username Port 22 IdentityFile ~/.ssh/id_rsa ServerAliveInterval 30 ServerAliveCountMax 3

几个字段的含义:

  • Host 是你在 VS Code 里看到的别名,可以随便取。
  • HostName 写服务器 IP 或域名。
  • User 是远程登录用户。
  • IdentityFile 指向私钥路径,建议用密钥登录,不要长期依赖密码。
  • ServerAliveIntervalServerAliveCountMax 可以减少空闲连接被断开的概率。

如果还没有 SSH 密钥,可以先生成一对,再把公钥放到服务器的 ~/.ssh/authorized_keys。私钥权限过宽会导致 SSH 拒绝使用,常见修复是:

bash
chmod 700 ~/.ssh chmod 600 ~/.ssh/id_rsa chmod 600 ~/.ssh/config

在 VS Code 中连接远程主机

F1Ctrl+Shift+P 打开命令面板,执行:

text
Remote-SSH: Connect to Host

选择刚才配置的 dev-linux。首次连接时,VS Code 会在远程机器下载并安装 VS Code Server。成功后左下角会显示远程主机名,这时再选择远程目录作为工作区。

连接后要注意一个细节:集成终端已经在远程服务器上运行。你执行 npm installpip installgo test,消耗的是远程机器资源,不是本机资源。

远程开发时文件、扩展和终端怎么工作

很多人第一次用 Remote SSH 会误以为 VS Code 在同步本地文件,其实不是。

文件操作发生在远程机器

你打开 /home/username/project 后,保存、搜索、Git 操作默认都针对远程目录。这样做的好处是不会出现“本地改了但服务器忘记同步”的问题。

如果你需要把本地文件传到远程,建议用 Git、SCP、rsync 或直接在远程仓库拉代码,不要把 VS Code 当作文件同步工具。

扩展分本地和远程两类

VS Code 会把扩展大致分成两类:

  • 主题、图标、快捷键这类界面扩展留在本地运行。
  • ESLint、TypeScript、Python、Go、调试器这类依赖项目环境的扩展会安装到远程。

如果某个语言提示突然失效,先看扩展面板里它是不是装在远程侧。有些扩展旁边会出现 “Install in SSH: xxx” 的按钮,需要手动点一下。

终端环境和远程登录环境不一定完全相同

VS Code 集成终端通常会读取远程用户的 shell 配置,但它和你直接用系统终端 SSH 登录仍可能有差异。比如 Node 版本管理器、conda、nvm 的初始化脚本没有加载,就会出现命令找不到。

遇到这种情况,先在 VS Code 终端里执行:

bash
which node node -v echo $SHELL

确认路径和版本,再检查 .bashrc.zshrc 或 profile 配置。

Dev Containers 如何配置

Dev Containers 适合“项目依赖比较重、团队环境容易不一致”的情况。它会把开发环境放进 Docker 容器,VS Code 连接到容器内部工作。

先安装 Dev Containers 扩展。旧教程里常写 “Remote - Containers”,现在扩展名称已经改为 Dev Containers。

项目根目录创建 .devcontainer/devcontainer.json

json
{ "name": "node-dev", "image": "mcr.microsoft.com/devcontainers/javascript-node:18", "customizations": { "vscode": { "extensions": ["dbaeumer.vscode-eslint"] } }, "postCreateCommand": "npm install", "remoteUser": "node" }

配置含义如下:

  • image 指定基础镜像,Node、Python、Go、Java 都有官方 devcontainer 镜像可选。
  • customizations.vscode.extensions 指定容器内建议安装的 VS Code 扩展。
  • postCreateCommand 在容器首次创建后执行,常用于安装依赖。
  • remoteUser 避免容器内文件全由 root 创建,减少权限问题。

配置好后,打开命令面板执行:

text
Dev Containers: Reopen in Container

VS Code 会构建或拉取镜像,把项目挂载进容器,再重新打开窗口。

Dev Containers 常见坑

容器开发最常见的慢,往往不是 VS Code 慢,而是构建上下文太大。把 node_modulesdist、日志文件、缓存目录写进 .dockerignore,能明显减少构建时间。

如果每次重建容器都要重新安装依赖,可以考虑用 Docker volume 缓存依赖目录。Node 项目尤其要注意,不要把宿主机的 node_modules 直接带进 Linux 容器,平台差异会让二进制依赖出问题。

端口方面,VS Code 通常会自动提示转发。比如容器里启动了 localhost:3000,本机浏览器可以通过转发端口访问。没有提示时,可以在 Ports 面板手动添加。

WSL 远程开发如何配置

WSL 适合 Windows 用户。它比传统虚拟机轻,也比把项目放在 Windows 文件系统里硬跑 Linux 工具顺手。

基本步骤:

  1. 安装 WSL 2 和一个 Linux 发行版,如 Ubuntu。
  2. 在 VS Code 安装 WSL 扩展。
  3. 打开 WSL 终端,进入项目目录后执行 code .

推荐把项目放在 WSL 的 Linux 文件系统里,例如:

bash
~/projects/my-app

不建议长期放在 /mnt/c/Users/... 下开发。跨 Windows 文件系统访问会更慢,文件权限、大小写、监听变更也更容易出问题。前端项目的 node_modules 很多时,这个差异会被放大。

如果你同时用 Docker Desktop,记得开启对应发行版的 WSL integration。否则 VS Code 在 WSL 里可能找不到 Docker,或者连接到了和预期不同的 Docker daemon。

如何减少卡顿和连接中断

远程开发是否顺手,很大程度取决于网络、文件监听和扩展数量。

减少不必要的文件监听

大型项目可以在工作区设置里排除构建产物和依赖目录:

json
{ "files.watcherExclude": { "**/node_modules/**": true, "**/.git/objects/**": true, "**/dist/**": true, "**/build/**": true }, "search.exclude": { "**/node_modules": true, "**/dist": true, "**/build": true } }

这不会删除文件,只是减少 VS Code 的监听和搜索负担。

只在远程安装必要扩展

语言服务、调试器、Lint 工具需要远程运行;主题、图标、Markdown 预览这类通常留在本地就够了。远程服务器配置不高时,少装几个后台常驻扩展,比改很多小参数更有效。

SSH 连接优先用密钥和保持活跃配置

密码登录不仅麻烦,也更容易受安全策略影响。推荐使用密钥加 ssh-agent。连接经常断开时,优先检查网络和安全组,再补充 keep alive 配置:

sshconfig
Host * ServerAliveInterval 30 ServerAliveCountMax 3

如果公司网络需要跳板机,可以在 SSH config 里配置 ProxyJump,这样 VS Code 也能复用同一套连接方式。

常见问题怎么排查

问题优先检查处理思路
连接失败SSH 配置、端口、安全组、用户名先用系统终端执行 ssh dev-linux,确认普通 SSH 能连通
一直卡在 Installing VS Code Server远程磁盘、home 权限、下载网络清理 ~/.vscode-server 后重连,或检查服务器是否能访问下载源
终端命令找不到shell 初始化脚本、PATH、nvm/conda在 VS Code 终端和普通 SSH 终端分别对比 echo $PATH
保存文件提示权限不足项目目录所有者、容器用户、sudo 创建文件修正目录 owner,Dev Containers 中设置 remoteUser
TypeScript、Python 提示失效扩展是否安装在远程、解释器路径在远程扩展区安装语言扩展,并选择正确解释器
WSL 项目很慢项目是否在 /mnt/c把项目移动到 WSL Linux 文件系统内
容器反复重装依赖镜像缓存、volume、postCreateCommand使用 .dockerignore 和依赖缓存,避免把无关文件放进构建上下文

排查顺序建议从“普通 SSH 或普通终端是否正常”开始。VS Code 远程开发建立在这些基础能力之上,底层连接或环境本身不稳定,编辑器层面很难单独修好。

安全和备份别忽略

远程开发会让本地编辑器直接操作服务器文件,权限边界要想清楚。

  • 私钥不要提交到仓库,也不要放进项目目录。
  • 谨慎使用 SSH Agent Forwarding,只在确实需要远程服务器继续访问 Git 仓库时开启。
  • 生产服务器不建议直接当开发机,至少要使用低权限账号和独立目录。
  • 远程环境变量、密钥、数据库配置应放在服务器或密钥管理系统中,不要写进代码。
  • 远程代码也要走 Git,不要只依赖服务器上的一份工作区。

最后怎么选

Remote SSH 适合直接在远程 Linux 机器上开发和调试;Dev Containers 适合把依赖、工具链和扩展配置一起固化到项目里;WSL 适合 Windows 用户获得更自然的 Linux 开发体验。

如果是个人项目,WSL 或 Remote SSH 通常最快上手。如果是团队项目,Dev Containers 的前期配置成本更高,但能减少“我这里跑不起来”的沟通成本。真正影响体验的不是装了多少远程扩展,而是环境边界是否清楚:文件在哪里,命令在哪里执行,依赖装在哪个系统里。

标签:VSCode