vscode-jumpserver

_

🧩 在启用 MFA 的跳板服务器上使用 VS Code Remote-SSH:完整踩坑与解决方案

关键词:VS Code Remote-SSH / MFA / 跳板机 / 内网服务器 / vscode-server / 无 root 权限


一、问题背景

在企业 / 学校 / 医院等内网环境中,服务器通常具备以下特征:

  • 启用 MFA(多因子认证)

  • 通过 跳板机 / 网关 登录

  • 无 root 权限

  • 服务器 出网受限或速度极慢

而 VS Code 的 Remote-SSH 恰好假设了一个理想环境

能自动 SSH
能自动 scp
能自动 wget 下载 vscode-server

于是,现实与假设发生了冲突。


二、问题现象(你可能也遇到过)

1️⃣ VS Code 卡在 scp / 安装阶段

Server installation process already in progress - waiting and retrying

或者:

Installation already in progress...

2️⃣ 日志显示卡在下载

Installing to ~/.vscode-server/bin/...
Downloading with wget

然后 无限等待


3️⃣ scp 看似成功,但服务器上找不到文件

scp vscode-server.tar.gz host:~/
# 上传成功

ls ~
# 却看不到文件

三、环境分析(问题的真正根源)

我的服务器环境如下:

  • 登录方式:

    User yangqi@yangqi@192.168.3.x
    
  • 说明:

    • 外层:跳板机(MFA 校验)

    • 内层:真实计算节点

  • 特点:

    • scpssh 解析的 ~ 不是同一个 HOME

    • 服务器 可以下载,但非常慢

    • 无法修改 /etc/ssh/sshd_config

👉 这是一个VS Code Remote-SSH 的典型不兼容环境


四、核心思路(关键转折点)

放弃让 VS Code 自动下载 vscode-server,改为手动安装。

原因很简单:

  • 自动下载依赖:

    • wget

    • 外网

    • 稳定网络

  • 这些条件,在内网服务器上几乎不成立


五、完整解决方案(不需要 root)

Step 1:获取 VS Code commit id

在 VS Code 中:

Help → About

例如:

commit: 994fd12f8d3a5aa16f17d42c041e5809167e845a

Step 2:在本地手动下载 vscode-server

curl -L \
https://update.code.visualstudio.com/commit:994fd12f8d3a5aa16f17d42c041e5809167e845a/server-linux-x64/stable \
-o vscode-server.tar.gz

Step 3:scp 上传(⚠️ 不要假设 /home/username)

scp -P 2222 vscode-server.tar.gz T7920:~/

✔ 上传成功 ≠ 文件在当前 shell 的 HOME
✔ 跳板环境下这是正常现象


Step 4:在服务器上定位文件真实位置

find / -name vscode-server.tar.gz 2>/dev/null

常见位置:

/home/yangqi/vscode-server.tar.gz

Step 5:解压到 VS Code 期望的位置

mkdir -p ~/.vscode-server/bin/994fd12f8d3a5aa16f17d42c041e5809167e845a

tar -xzf /home/yangqi/vscode-server.tar.gz \
  -C ~/.vscode-server/bin/994fd12f8d3a5aa16f17d42c041e5809167e845a \
  --strip-components=1

Step 6:验证是否成功

ls ~/.vscode-server/bin/994fd12f8d3a5aa16f17d42c041e5809167e845a

看到以下内容即成功:

bin
extensions
node
server.sh

六、VS Code 本地必要设置(防止复发)

{
  "remote.SSH.showLoginTerminal": true,
  "remote.SSH.useLocalServer": true,
  "remote.SSH.useFlock": false
}

为什么要关 useFlock

  • NFS / 跳板 / 多用户环境下

  • flock 极易导致 死锁

  • 官方 issue 长期存在


七、关于“以后要不要频繁更新”的问题

结论先行:

不需要频繁更新。

原因:

  • vscode-server 只与 VS Code 的 commit id 绑定

  • 只要你:

    • 不升级 VS Code

    • 或固定版本使用
      👉 服务器端无需任何改动

推荐实践:

{
  "update.mode": "none"
}

需要升级时:

  1. 升级本地 VS Code

  2. 顺手重新下载一次 vscode-server

  3. scp + 解压


八、关键经验总结(血泪版)

✅ 永远不要假设

  • /home/username 存在

  • scp 的 ~ == ssh 的 ~


✅ 在内网服务器上

  • 自动下载 = 不稳定

  • 手动安装 = 一次解决


✅ MFA + 跳板 + VS Code

  • 不是你不会用

  • 是工具默认假设与你的环境不匹配


九、结语

MFA + 跳板 + 无 root + 内网 的环境下:

手动部署 vscode-server
固定 VS Code 版本
是目前最稳定、最可控、最工程化的方案。

这不是 hack,也不是 workaround,
而是现实世界里最优解。


如果你愿意,我可以下一步帮你整理:

  • 多台服务器统一部署脚本

  • 一行命令自动匹配 commit 并安装

  • HPC / 学校集群通用模板

你只需要一句话:
👉 “我要脚本版”

未探索区域 2026-03-06

评论区