普通网友 2025-12-28 00:30 采纳率: 98.6%
浏览 16
已采纳

VS Code远程连接失败,下载服务器卡住

在使用 VS Code 通过 Remote-SSH 远程连接服务器时,常出现连接失败且下载远程服务器组件(如 server.sh)过程卡住的问题。该问题多因网络不稳定、目标服务器权限配置不当或 VS Code 自动代理设置异常所致。典型表现为终端提示“Downloading the VS Code Server”长时间无响应。可能原因包括:SSH 连接虽建立但数据传输受限、服务器磁盘空间不足、防火墙阻断下载源(如 GitHub 或 Azure 镜像),或本地 ~/.vscode-server/cached 目录冲突。此外,某些企业网络环境对出站请求的限制也会导致下载中断。解决此问题需结合日志分析、手动安装服务端组件及网络代理优化等手段。
  • 写回答

1条回答 默认 最新

  • 小丸子书单 2025-12-28 00:31
    关注

    一、问题现象与典型表现

    在使用 VS Code 通过 Remote-SSH 扩展连接远程服务器时,用户常遇到“Downloading the VS Code Server”的卡顿或长时间无响应现象。该过程是 VS Code 自动在目标服务器上部署 vscode-server 组件(如 server.sh)的关键步骤,若失败将导致无法进入远程开发环境。

    • 终端输出停留在“Downloading VS Code Server”阶段超过5分钟
    • SSH 连接已建立,但后续组件下载无进度条更新
    • 日志中出现 Connection closed by remote hostFailed to fetch 错误
    • 本地 ~/.vscode-server/cached/ 目录存在部分临时文件但未完成写入
    • 服务器端 /root/.vscode-server/bin/ 目录为空或权限拒绝

    二、常见原因分类与层级分析

    层级可能原因影响范围检测方式
    网络层GitHub/Azure 下载源被墙或限速全局性curl 测试下载速度
    系统层磁盘空间不足(df -h)单节点df 命令检查
    权限层用户对 ~/.vscode-server 无写权限用户级ls -la 检查目录权限
    代理层VS Code 自动代理配置异常客户端侧查看 settings.json 中 http.proxy
    防火墙层出站请求被企业防火墙阻断组织级telnet 或 nc 测试外联端口
    缓存层本地 cached 目录损坏或版本冲突本地机器删除缓存重试

    三、诊断流程与日志定位

    首先应启用详细日志以获取精确错误信息。操作路径如下:

    1. 打开命令面板(Ctrl+Shift+P)
    2. 执行 “Remote-SSH: Set Log Level”
    3. 选择 “Trace” 级别
    4. 重新尝试连接并观察输出面板中的 “Remote-SSH” 日志
    5. 查找关键词:Downloading VS Code Server, startServerCommand, installChannelId
    6. 检查是否触发了从 update.code.visualstudio.com 的 HTTPS 请求
    7. 确认下载 URL 是否可手动访问(如:https://update.code.visualstudio.com/commit:xxx/server-linux-x64/stable)
    8. 查看服务器端是否有临时文件生成于 ~/.vscode-server/bin/
    9. 运行 journalctl -u ssh 检查 SSH 子系统行为(如适用)
    10. 对比本地和远程的 VS Code 版本兼容性

    四、解决方案矩阵

    根据诊断结果采取分层应对策略:

    # 示例:手动安装 vscode-server
    # 在服务器端执行:
    VERSION="899c100a1d9a01dd8ad3782b787f22975e5bb31e"  # 对应本地 VS Code Commit ID
    TARGET_DIR="$HOME/.vscode-server/bin/$VERSION"
    mkdir -p $TARGET_DIR
    
    # 使用国内镜像加速下载
    wget -O /tmp/vscode-server-linux-x64.tar.gz \
      https://vscode.cdn.azure.cn/stable/$VERSION/vscode-server-linux-x64.tar.gz
    
    tar --strip-components=1 -xz -C $TARGET_DIR -f /tmp/vscode-server-linux-x64.tar.gz
    touch $HOME/.vscode-server/data/Machine/id
    
    # 设置执行权限
    chmod +x $TARGET_DIR/server.sh
        

    五、网络代理优化与镜像切换

    针对企业网络限制场景,可通过以下方式绕过下载瓶颈:

    • settings.json 中显式设置代理:
    {
        "http.proxy": "http://proxy.corp.com:8080",
        "remote.SSH.useLocalServer": false,
        "remote.downloadExtensionsLocally": true
    }
        
    • 修改 Hosts 文件指向 Azure China 镜像:
    # 添加到 /etc/hosts
    13.66.169.248 update.code.visualstudio.com
        

    六、高级调试:Mermaid 流程图辅助决策

    graph TD A[启动 Remote-SSH 连接] --> B{SSH 成功?} B -->|Yes| C[尝试下载 vscode-server] B -->|No| Z[检查 SSH 配置] C --> D{下载进度停滞?} D -->|Yes| E[检查网络连通性] E --> F[curl update.code.visualstudio.com] F --> G{返回 200?} G -->|No| H[配置代理或换镜像] G -->|Yes| I[检查磁盘与权限] I --> J[手动安装 server] J --> K[连接成功] D -->|No| K

    七、预防性维护建议

    为避免重复发生此类问题,推荐实施以下最佳实践:

    • 定期清理本地 ~/.vscode-server/cached 缓存目录
    • 在多台服务器间复用已安装的 ~/.vscode-server 目录(通过 rsync 同步)
    • 建立内部私有镜像服务,缓存常用版本的 vscode-server 包
    • 使用 Ansible 或 Shell 脚本批量预装 vscode-server 到集群节点
    • 监控远程服务器的 inotify watch 数量,防止文件监听耗尽(fs.inotify.max_user_watches
    • 启用 SSH ControlMaster 复用连接,提升传输稳定性
    • 在 CI/CD 环境中禁用自动更新机制,锁定稳定版本
    • 记录每次 VS Code Commit ID 与服务器环境对应关系
    • 对容器化环境使用 Dev Containers 替代 Remote-SSH
    • 配置 DNS 缓存服务减少外网依赖
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 12月29日
  • 创建了问题 12月28日