VSCode远程插件必须手动安装到远端,因设计上本地只处理UI和协议,远端仅运行vscode-server;语言支持、LSP、调试器等需访问远端环境的插件必须通过“Install on SSH Host”安装并重启窗口。

Remote Extension 为什么装不上远端?
VSCode 的远程开发插件(比如 Python、Prettier)默认只装在本地,远端服务器上根本没运行这些插件的进程。不是你漏点了“Install on SSH Host”,而是 VSCode 从设计上就强制分离:本地负责 UI 和协议桥接,远端只跑一个轻量 vscode-server 实例,不加载任何非必需扩展。
常见错误现象:
– 打开远端文件后,格式化快捷键失效,Shift+Alt+F 没反应
– Python 插件显示“已启用”,但 Ctrl+Shift+P 里搜不到 Python: Select Interpreter
– 终端里执行 which python 正常,但 VSCode 就是识别不了解释器路径
- 必须手动标记插件为“Remote Extension”:右键插件 →
Install on SSH Host(或Install on Container/Install on WSL) - 部分插件不支持远端运行(如
GitLens的某些功能),会灰掉安装选项,别硬试 - 装完要重启远端窗口(
Developer: Reload Window或直接关掉再连),否则新插件进程不会启动
哪些插件必须装在远端?
核心判断标准:插件是否需要访问远端文件系统、进程、环境变量或语言服务进程。UI 类插件(主题、快捷键增强)可以只留本地;但所有语言支持、LSP、调试器、格式化工具都得落远端。
典型必须远端安装的插件:
– Python(依赖远端 python 可执行文件和 pylsp/pyright)
– Go(需调用远端 gopls)
– ESLint(需读取远端项目根目录下的 .eslintrc.js 并执行 eslint CLI)
– Remote - SSH 本身不算,但它触发的远端插件安装逻辑才是关键
- 检查方法:连上远端后,打开
Extensions视图,切换到Installed标签页,顶部点Remote筛选器,只看带“Remote”标识的插件 - 如果某个插件在远端筛选下不出现,说明它没被标记为远端安装,即使图标显示“已启用”也无效
-
Settings Sync默认不同步远端安装状态,别指望它帮你自动装好
远端插件装在哪?能不能手动部署?
远端插件实际解压在用户家目录下的 ~/.vscode-server/extensions/,每个插件一个子目录,命名含哈希值(如 ms-python.python-2024.6.0)。这个路径不能改,也不建议手动 cp 文件进去 —— vscode-server 启动时会校验签名和完整性,乱放会导致插件被静默禁用。
- 正确手动补救方式:在远端终端执行
code --install-extension ms-python.python(需确保code命令指向远端vscode-server的 CLI 包装脚本) - 如果远端没网络,可先在本地下载
.vsix文件(从 marketplace 页面点“Download Extension”),再用scp传上去,然后运行code --install-extension /path/to/file.vsix - 注意权限:插件目录属主必须是当前登录用户,
chmod -R 755 ~/.vscode-server/extensions可解决部分加载失败问题
装了还是不工作?重点查这三处
远端插件安装成功 ≠ 功能可用。很多问题卡在环境链路上,而不是插件本身。
- 确认远端
$PATH是否包含所需二进制:在 VSCode 内置终端运行echo $PATH,对比直接 ssh 进去执行的结果 —— VSCode 启动时可能没读取~/.bashrc或~/.zshrc,得在settings.json里配"remote.SSH.env": { "PATH": "/opt/conda/bin:/usr/local/bin:/usr/bin" } - 检查插件日志:打开
Output面板,下拉选择对应插件(如Python),看有没有Failed to start language server或Cannot find module 'eslint'这类报错 - 验证 LSP 进程是否真在远端运行:
ps aux | grep -i lsp,如果只有本地进程(pid 属于你本地机器的 ssh 连接),说明远端服务根本没起来
最常被忽略的一点:远端 shell 初始化脚本里如果有交互式判断(比如 [ -t 0 ] && echo "hi"),会导致 vscode-server 启动时卡住,进而让所有远端插件无法初始化 —— 删掉这类判断,或者用 [[ -z $VSCODE_IPC_HOOK_CLI ]] || return 做隔离。


















