1. VS Code Remote-SSH 卡在下载服务器与拓展的真实场景
VS Code Remote-SSH 卡在下载服务器与拓展,是远程开发里最让人抓狂的一类故障。你点下连接,状态栏一直停在「正在下载 VS Code 服务器」或者「正在使用 scp 将 vscode 服务器复制到主机」,进度条不动,重试几次还是原地打转;好不容易连上了,装 Python 拓展时又卡在「正在下载拓展」,一个 vsix 转半天最后报超时。这篇就围绕这两个高频卡点,从网络连通、代理配置、离线安装三条路径给你可复制的 settings.json 和命令行参数,并顺带演示怎么把 API 请求统一改到 TaoToken 的 Key 通道来验证连通性,让远程连接和拓展安装都不再卡住。
先说清楚它到底在干什么。Remote-SSH 的本质是:本地 VS Code 通过 SSH 连上远程服务器,然后在服务器上跑一个叫 vscode-server 的后台进程,本地只负责 UI。第一次连接时,本地会把一个约 100MB 的 server 包通过 scp 传到服务器~/.vscode-server目录,服务器再解压启动。如果服务器本身访问不了外网,或者本地到服务器的 scp 通道被限速,就会卡在「下载服务器」。拓展卡住同理:VS Code 默认会尝试从 Marketplace 在线拉 vsix,服务器没外网就卡死。
适合谁看:经常用 Remote-SSH 连内网机器、跳板机、云主机做开发的同学;尤其是服务器只开了内网、不能直连外网,或者公司网络对出站做了限制的环境。下面按「先定位、再配置、后验证」的顺序来,每一步都能直接抄。
2. 用 TaoToken 统一 Key 通道做连通性前置检查
在动手改 Remote-SSH 之前,我建议先做一件事:确认你本机到外网的 API 通道是通的。因为很多「卡在下载」的根因,其实是本地网络对某些域名做了拦截或限速,而你误以为是服务器的问题。这里用 TaoToken 的统一 Key 通道做一个轻量验证,它把模型 API 请求收敛到一个入口,方便你判断「到底是网络不通,还是配置写错」。
TaoToken 是什么:它是一个统一的大模型 API Key 通道,你拿一个 Key 就能调用多种模型,Base URL 固定,不用为每个模型单独配一套地址。对远程开发场景来说,它的价值在于——你可以用一条 curl 命令验证本机出站是否正常,从而把「网络问题」和「VS Code 配置问题」分开。
适合谁:需要频繁切换模型做代码补全、又不想在每台机器上维护多套 Key 的开发者;以及像本文这样,需要一个稳定入口来排查网络连通性的人。
先拿 Key。打开官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,注册后在控制台创建 API Key。控制台地址是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,Key 管理在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 。拿到形如sk-xxxx的 Key 后先存好,后面配置和验证都要用。
这里要强调一个排查思路:Remote-SSH 卡住时,先别急着删缓存、降版本。先用下面这条命令确认本机能不能正常访问 API 通道:
curl -sS -o /dev/null -w "%{http_code}\n" \ https://taotoken.net/api/v1/models \ -H "Authorization: Bearer sk-你的Key"如果返回200,说明本机出站和 Key 都没问题,那卡顿大概率出在服务器侧或 scp 通道;如果返回401,是 Key 写错了;如果直接超时或Could not resolve host,那就是本机网络层的问题,得先解决这个,再去折腾 Remote-SSH。这一步能帮你省掉大量无效尝试。
3. 可复制的 settings.json 与离线安装配置
定位完网络,进入正题。Remote-SSH 的卡顿,八成能靠「关掉自动下载 + 走离线」解决。下面给你三份可直接复制的配置。
3.1 本地 settings.json:关掉自动下载拓展
打开本地 VS Code 的settings.json(Ctrl+Shift+P→Preferences: Open User Settings (JSON)),加入以下内容。核心是让 Remote-SSH 不要自动往服务器推拓展,避免它在没外网时死等:
{ "remote.SSH.remotePlatform": { "你的主机别名": "linux" }, "remote.SSH.useLocalServer": false, "remote.SSH.connectTimeout": 60, "remote.SSH.showLoginTerminal": true, "remote.SSH.enableRemoteCommand": false, "remote.downloadExtensionsLocally": true, "extensions.autoUpdate": false, "extensions.autoCheckUpdates": false }逐条说下作用。remote.SSH.useLocalServer: false让连接走标准 SSH 流程,减少本地 server 中转带来的卡顿;connectTimeout调到 60 秒,给慢网络留余量;remote.downloadExtensionsLocally: true是关键——它让拓展先在本地下载好再传过去,而不是让服务器自己去 Marketplace 拉,服务器没外网时这一步能救命;extensions.autoUpdate和autoCheckUpdates关掉,防止后台偷偷联网。
另外,把「Default Extensions」清空也很重要。在设置里搜remote.SSH.defaultExtensions,如果里面有值,全部删掉。很多人卡在下载服务器,就是因为 VS Code 连上后自动去装这些默认拓展,而服务器没网,于是卡死。
3.2 服务器侧:手动放置 vscode-server
如果本地 scp 也慢,可以手动把 server 包传上去。先在你本机找到对应版本的 commit id:VS Code 里Help → About,复制那串 commit hash。然后拼出下载地址:
# 在本机执行,把 server 包下到本地 COMMIT=你的commit_id curl -L -o vscode-server.tar.gz \ "https://update.code.visualstudio.com/commit:${COMMIT}/server-linux-x64/stable"下好后 scp 到服务器,解压到指定目录:
# 传到服务器 scp vscode-server.tar.gz user@host:/tmp/ # 在服务器上执行 mkdir -p ~/.vscode-server/bin/${COMMIT} tar -xzf /tmp/vscode-server.tar.gz -C ~/.vscode-server/bin/${COMMIT} --strip-components=1 touch ~/.vscode-server/bin/${COMMIT}/0那个0文件是标记位,告诉 VS Code「这个版本的 server 已经就绪,别再下了」。这一步做完,重连基本就不会卡在下载服务器。
3.3 离线安装 vsix 拓展
拓展卡住同理,走离线。先拿到 vsix 文件,再上传安装。命令行安装最稳:
# 上传 vsix 到服务器后,在服务器上执行 code --install-extension ms-python.debugpy-2025.17.2025121102@linux-x64.vsix注意架构要匹配,服务器是 x64 就用linux-x64,ARM 就用linux-arm64。装 Python 拓展时顺序别错:先 Pylance,再 debugpy,最后 Python 主插件。顺序错了,VS Code 会偷偷联网补依赖然后卡死。
4. 验证请求与成功结果
配置改完,来验证。第一步,重连 Remote-SSH,观察状态栏。正常情况下你会看到「正在下载 VS Code 服务器」一闪而过,或者直接跳过,进入「正在打开远程」。如果之前手动放了 server 包,这一步几乎是秒过。
第二步,验证 API 通道在服务器侧也通。有些同学是服务器需要访问 API 做代码补全,那就在服务器上跑一遍:
curl -sS https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer sk-你的Key" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-4o-mini", "messages": [{"role": "user", "content": "ping"}] }'返回里能看到choices字段和内容,就说明服务器到 API 通道是通的。如果这里报local proxy failed或超时,说明服务器出站被限制,需要单独处理,而不是 Remote-SSH 的问题。
第三步,验证拓展。装完后在远程窗口的拓展面板里,已安装的拓展会显示「Install in SSH: 主机名」,状态是已启用。打开一个.py文件,能看到语法高亮和补全,就说明 Pylance 和 Python 插件都正常工作了。
实测下来,把remote.downloadExtensionsLocally打开 + 手动放 server 包 + 清空 Default Extensions 这三招组合,能解决九成以上的卡顿。剩下的一成,多半是 SSH 本身握手慢或者服务器磁盘满,那就得从系统层面查了。
5. 本篇常见错误排查
下面按真实报错对照着排。
报错一:401 Unauthorized。出现在 curl 验证 API 时。原因就一个:Key 写错或过期。检查Authorization: Bearer sk-xxx里的 Key 有没有多余空格,或者去控制台重新生成一个。注意 Base URL 是https://taotoken.net/api,别多加/v1之外的路径。
报错二:local proxy failed。这个通常出现在你本地配了代理,但代理没起来或者规则不对。Remote-SSH 会继承本地代理设置,如果代理挂了,连接就卡。解决办法:临时关掉本地代理,或者在 settings.json 里给 Remote-SSH 单独配http.proxy为空。
报错三:reading choices相关解析失败。这多半是 API 返回了非预期格式,比如返回了 HTML 错误页而不是 JSON。检查请求头Content-Type有没有写对,以及模型名是否拼错。用curl -v看完整响应体,能快速定位。
报错四:OAuth 或登录态失效。如果你用的是需要 OAuth 的模型通道,token 过期会报这个。重新走一遍授权流程,或者换成 API Key 方式调用,后者更稳定。
报错五:卡在「正在打开服务器」Opening Remote。这个偏玄学,常见原因是语言环境。有同学反馈切成英文界面就能打开,中文界面卡住。可以在命令面板执行Configure Display Language切成en试试。另外检查服务器~/.vscode-server目录权限,确保当前用户可写。
报错六:vsix 安装报架构不匹配。比如下了linux-x64的包装到 ARM 服务器上。用uname -m确认服务器架构,x86_64 对应 x64,aarch64 对应 arm64。
排查时记住一个原则:先分清是「本地问题」还是「服务器问题」。用第 2 节的 curl 命令在本机和服务器各跑一次,结果一对比,方向就清楚了。
6. 长期编码与 Agent 场景的 Key 通道建议
如果你不只是偶尔连一下服务器,而是长期在远程环境里做编码、跑 Agent,那 Key 通道的稳定性就很重要了。频繁切换模型、多台机器共用一套 Key,管理起来很烦。TaoToken 的 Coding Plan 就是为这种场景准备的,一个 Key 覆盖多种模型,Base URL 固定,配置一次到处能用。
具体来说,在远程服务器的开发环境里,你可以把模型请求统一指向https://taotoken.net/api,Key 用同一个。这样无论你本地还是远程、无论换哪台机器,配置都不用改。对于跑自动化脚本、CI 里调用模型的场景,也能省掉一堆环境变量。
想了解长期编码方案的,可以看 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 。如果你更想先手动验证模型效果,直接去模型对话页试:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model-chat&utm_campaign=rewrite 。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,里面有各语言的调用示例。
最后给个实用技巧:把常用的 curl 验证命令写成一个 shell 脚本,放在服务器~/bin/check-api.sh,每次连上服务器先跑一下,几秒钟就能确认通道是否正常。这比等到写代码时才发现请求失败要高效得多。远程开发的卡顿,很多时候不是 VS Code 的锅,而是网络链路没理清。把 Key 通道统一、把离线包备好,剩下的就是顺滑的编码体验了。