详细介绍:VS Code 新旧版本 Remote-SSH 内网离线连接服务器方法(版本 ≤ 1.78.x 及 ≥ 1.79.0)
2025-11-26 20:01 tlnshuju 阅读(0) 评论(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/└──/├── server.tar.gz├── 0└── … # 其他解压后的文件 新版(≥ 1.79.0)
~/.vscode-server/├── cli/│ └── servers/│ └── Stable-/│ └── server/│ └── … # 所有 server 文件├── vscode-cli- .tar.gz└── vscode-cli- .tar.gz.done
模型迭代
旧模型(v1.78 及之前):
- 拆分成主程序 + CLI 两个包,解压后都落在 ~/.vscode-server/bin//…,其中包含 bin/、server.sh 等文件夹和脚本。
新模型(v1.79–v1.88 过渡至 v1.88 稳定):
- 主程序与 CLI 合并为一个扁平化包(更快)。解压后直接在 ~/.vscode-server/ 根目录放置 code-(单可执行文件)和 cli/ 子目录,无再嵌套 bin/ 目录。
部署方法
首先在 VS Code 上安装 Remote‑SSH 插件,点击左侧 Remote Explorer。
若远端(服务器)能上网,通常能直接连上使用。
下面说的是,离线部署 解决远端不能上网,VS Code 连不上的情况。
旧版(版本 ≤ 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
- Windows:
添加以下配置:
{"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 了很多次才试出的方法.
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/977599.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!