云计算百科
云计算领域专业知识百科平台

VS Code 新旧版本 Remote-SSH 内网离线连接服务器方法(版本 ≤ 1.78.x 及 ≥ 1.79.0)

文章目录

  • 前言
  • 版本概览
    • 目录结构
    • 模型迭代
  • 旧版(版本 ≤ 1.78.x)离线部署流程
    • 1. 问题描述
    • 2. 原理说明
      • 3. 离线部署步骤
  • 新版(版本 ≥ 1.79.0)离线部署流程
    • 1. 目录结构变化
    • 2. 全局设置调整
    • 3. 离线部署步骤
  • 常见问题 & 排查
  • 总结与建议

前言

公司出于代码安全考虑,所有服务器均处于内网、无法直接访问互联网;同时,我们仍需使用 VS Code 的 Remote‑SSH 功能连接到这些代码服务器。 下面将分别介绍 VS Code 旧版(≤ 1.78.x)和新版(≥ 1.79.0)在内网离线环境下部署 vscode-server 的完整流程,并补充了常见问题排查与优化建议。


版本概览

版本 和 Commit 号 可以在 VS Code → Help → About 上查看。

目录结构

  • 旧版(≤ 1.78.x)

    ~/.vscode-server/
    └── bin/
    └── <COMMIT_ID>/
    ├── server.tar.gz
    ├── 0
    └── … # 其他解压后的文件

  • 新版(≥ 1.79.0)

    ~/.vscode-server/
    ├── cli/
    │ └── servers/
    │ └── Stable-<COMMIT_ID>/
    │ └── server/
    │ └── … # 所有 server 文件
    ├── vscode-cli-<COMMIT_ID>.tar.gz
    └── vscode-cli-<COMMIT_ID>.tar.gz.done

模型迭代

旧模型(v1.78 及之前):

  • 拆分成主程序 + CLI 两个包,解压后都落在 ~/.vscode-server/bin//…,其中包含 bin/、server.sh 等文件夹和脚本。

新模型(v1.79–v1.88 过渡至 v1.88 稳定):

  • 主程序与 CLI 合并为一个扁平化包(更快)。解压后直接在 ~/.vscode-server/ 根目录放置 code-(单可执行文件)和 cli/ 子目录,无再嵌套 bin/ 目录。

旧版(版本 ≤ 1.78.x)离线部署流程

1. 问题描述

  • 错误提示:

    Resolver error: Error: XHR failedscode

  • 远程会生成一个 ~/.vscode-server/bin/<COMMIT_ID>/ 目录,但下面 *.tar.gz 文件大小为 0。

2. 原理说明

  • VS Code 客户端通过 Remote‑SSH 模块向远程发起连接。
  • 远程执行脚本:创建 ~/.vscode-server/bin/<COMMIT_ID>/,并尝试用 wget 下载服务器组件。
  • 无网环境下,wget 会下载一个 0 字节的占位文件。
  • 客户端认为已经下载完毕,跳过后续流程,导致连接失败。
  • 3. 离线部署步骤

    # 假设 COMMIT_ID=3b8xxxxxxx
    COMMIT=3b8xxxxxxx

    # 1. 本地下载(有网环境):
    # https://update.code.visualstudio.com/commit:<COMMIT>/server-linux-x64/stable
    # 或 server-win32-x64、其他架构包
    wget -O vscode-server-linux-x64.tar.gz \\
    "https://update.code.visualstudio.com/commit:${COMMIT}/server-linux-x64/stable"

    # 2. 上传到远程:
    scp vscode-server-linux-x64.tar.gz user@remote:${REMOTE_DIR}/

    # 3. ssh到远程执行:
    cd ~/.vscode-server/bin/${COMMIT}
    tar zxvf vscode-server-linux-x64.tar.gz –strip 1
    # 标记部署完成
    touch ~/.vscode-server/bin/${commit_id}/0
    # 删除锁文件(若存在)
    rm -f vscode-remote-lock.*

    Tip: 删除 vscode-remote-lock.* 文件可避免死锁导致的反复输入密码。


    新版(版本 ≥ 1.79.0)离线部署流程

    1. 目录结构变化

    新版将 bin/<COMMIT> 目录拆分为两部分:

    • Server:~/.vscode-server/cli/servers/Stable-<COMMIT>/server
    • CLI:~/.vscode-server/vscode-cli-<COMMIT>.tar.gz{,.done}

    2. 全局设置调整

    为了阻止远程主机自动 wget,需将下载策略改为“始终本地下载”:

  • 打开或新建 VS Code 用户设置文件:

    • Windows:%APPDATA%\\Code\\User\\settings.json
    • Linux/macOS:~/.config/Code/User/settings.json
  • 添加以下配置:

    {
    "remote.SSH.localServerDownload": "always"
    }

  • 此时,Remote‑SSH 会跳过远程 wget,始终在本地下载 .tar.gz 并通过 SCP 上传。

    VS Code 会在本地(client 端)先准备好 Remote Server 所需的 VS Code Server 文件,然后通过 SSH 传输到远程服务器(remote 端)上去执行。 如果客户端有网,能用这个方法连上也再好不过了

    重启 VS Code 生效。

    3. 离线部署步骤

    这里就是客户端和远程端都无网的情况了,上面第②步依然要操作,否则连接时依旧会从远程端 wget 去下载一些所需的压缩包,把本地的给覆盖了。

    # 以 COMMIT=19e… 为例
    COMMIT=19e...

    # 本地下载 Server & CLI 包
    wget -O vscode-server-linux-x64.tar.gz \\
    "https://update.code.visualstudio.com/commit:${COMMIT}/server-linux-x64/stable"
    wget -O vscode-cli-alpine-x64.tar.gz \\
    "https://update.code.visualstudio.com/commit:${COMMIT}/cli-alpine-x64/stable"

    # 上传到远程
    scp vscode-server-linux-x64.tar.gz vscode-cli-alpine-x64.tar.gz user@remote:~

    # 在远程执行
    ssh user@remote
    # 1. 创建新版 Server 目录
    mkdir -p ~/.vscode-server/cli/servers/Stable-${COMMIT}/server
    # 2. 解压 Server 包(去顶层目录)
    tar -xzf ~/vscode-server-linux-x64.tar.gz \\
    –strip-components=1 \\
    -C ~/.vscode-server/cli/servers/Stable-${COMMIT}/server
    # 3. 部署 CLI 包并标记
    cp ~/vscode-cli-alpine-x64.tar.gz \\
    ~/.vscode-server/vscode-cli-${COMMIT}.tar.gz
    cp ~/vscode-cli-alpine-x64.tar.gz \\
    ~/.vscode-server/vscode-cli-${COMMIT}.tar.gz.done

    然后重启重新连接。


    常见问题 & 排查

  • 仍提示下载失败 / 0 字节

    • 确认 remote.SSH.localServerDownload 已设为 "always";
    • 清空远程缓存:rm -rf ~/.vscode-server/*,重新部署。
  • 权限不足

    • 检查远程目录权限:chmod -R u+rwx ~/.vscode-server;
    • 若使用非默认路径,确保 ~/.config/Code/User/settings.json 中的 SSH 配置指向正确主机。
  • SSH 连接卡在“Installing VS Code Server”

    • 可在设置中启用 remote.SSH.showLoginTerminal,查看详细日志;
    • 手动在远程执行 ~/.vscode-server/bin/<COMMIT>/server.sh 看输出。
  • 版本不匹配

    • 确认本地 VS Code 帮助 ⇒ 关于 中的 Commit 与上传包一致;
    • 如误上传了错误架构包,请重新下载对应平台 tar.gz。

  • 总结与建议

    • 旧版 容器简单,直接将 vscode-server 解压到 bin/<COMMIT> 并标记 touch 0 即可;
    • 新版 目录更清晰,但需额外上传 CLI 包并调整下载策略;
    • 强烈建议 统一使用 remote.SSH.localServerDownload: "always",将下载逻辑完全交由本地,避免覆盖问题;
    • 在脚本中可加入判断和自动上传逻辑,进一步简化日常运维流程。

    这个新版 VS Code Remove-SSH 很坑的,正常情况一个环境部署流程会检验一份文件是否需要存在再决定 wget 下载,这里不验证直接就帮我把它 wget 覆盖成一份 0 字节的文件(没连外网),很明显这逻辑就是有漏洞的,也不确定是我下的版本(v1.100)刚好有问题,也不确定后面是否会修复,上面也是部署过程中 debug 了很多次才试出的方法.

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » VS Code 新旧版本 Remote-SSH 内网离线连接服务器方法(版本 ≤ 1.78.x 及 ≥ 1.79.0)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!