不能直接复制extensions文件夹,因私有云插件(如Remote-SSH)的远端扩展运行在服务器/容器中,本地仅存前端代理;远端路径、版本、二进制与本地VS Code强绑定,拷贝会导致校验失败、签名不匹配或扩展主机异常终止。

VSCode私有云插件部署本身不支持“备份插件二进制文件”这种操作——你真正该备份的,是插件 ID 列表 + 用户配置 + 远端环境元信息,而不是 extensions 目录下的文件夹。
为什么不能直接复制 extensions 文件夹?
私有云插件(如 Remote-SSH、Remote-Containers、Dev Containers 扩展)实际运行在远端(服务器/容器/WSL),本地 ~/.vscode/extensions 或 %APPDATA%\Code\extensions 里只存了前端代理和 UI 控制逻辑。远端扩展目录(比如 ~/.vscode-server/extensions)由 VS Code 自动管理,且路径、版本、依赖关系与本地 VS Code 版本强绑定。直接拷贝会触发校验失败、签名不匹配或启动报错 Extension host terminated unexpectedly。
- 远端扩展安装路径随 VS Code 版本升级变化(例如
.vscode-server/bin/abc123...下的子目录结构) - 同一插件在 Linux/macOS/Windows 容器中可能有不同构建,ID 相同但二进制不互通
- Remote-SSH 的
known_hosts和config文件若未备份,连接时会卡在主机密钥验证环节
code --list-extensions 导出的是本地还是远端插件?
它只列出**当前工作区连接上下文下的已启用插件 ID**:本地窗口运行时显示的是本地 extensions;但如果你已通过 Remote-SSH 连入服务器,再执行该命令,则输出的是**远端服务器上已安装的插件 ID 列表**(前提是 VS Code CLI 已正确识别远程环境)。这是最可靠的备份依据。
- 确保在连接状态下执行:
code --list-extensions --profile default(避免 profile 冲突) - 导出到文件:
code --list-extensions > remote-extensions.txt - 注意:某些插件(如
ms-python.pylance)需配合 Python 环境存在才生效,仅 ID 不足以保证功能完整
迁移时必须同步的三个非插件文件
私有云场景下,光有插件列表远远不够。以下三项缺失会导致连接失败、路径解析错误或自动重装失效:
-
%USERPROFILE%\.ssh\config(Windows)或~/.ssh/config(macOS/Linux):定义 Host 别名、端口、用户、IdentityFile 路径 -
%USERPROFILE%\.ssh\known_hosts或~/.ssh/known_hosts:记录远端主机公钥指纹,迁移后首次连接会因指纹不匹配被拒绝 -
%APPDATA%\Code\User\settings.json中的远程相关设置,例如:"remote.SSH.configFile"、"remote.containers.defaultExtensions"、"terminal.integrated.env.linux"(注意跨平台键名差异)
恢复远端插件的正确顺序
不要一上来就点 Remote-SSH 连接。顺序错了,VS Code 会在远端自动生成默认配置,覆盖你精心准备的列表。
- 先关闭所有 VS Code 实例(包括后台进程,用任务管理器或
killall code确认) - 覆盖本地
settings.json和.ssh目录 - 启动 VS Code,但**暂不连接远端**;打开命令面板,执行
Remote-SSH: Kill VS Code Server on Host清理旧服务 - 再执行
Remote-SSH: Connect to Host...,首次连接时 VS Code 会根据remote.SSH.defaultExtensions和extensions.txt自动安装远端插件 - 验证:连接成功后,在远端终端运行
code --list-extensions,比对是否与remote-extensions.txt一致
远端插件恢复最常被忽略的点是 known_hosts 的清理时机——它必须在首次连接前手动删掉对应行,或用 ssh-keygen -R hostname 命令移除,否则 VS Code 会静默失败,连错误提示都不弹。


















