返回 文章 学习 CMS 文章

VSCode 的 SSH 代理机制:远程编辑的安全隐忧

VSCode 的 SSH 远程编辑会下载并运行一个具有文件系统访问、任意编辑、启动 shell 和持久化能力的代理,这引发了安全担忧。

VSCodeSSH远程编辑安全
成长分 / 100 65 综合收获、行动、留存与影响

VSCode 的 SSH 代理机制:远程编辑的安全隐忧
为什么值得读了解 VSCode 远程编辑背后的代理机制及其潜在安全影响。

对比 VSCode 与 Emacs Tramp 在远程编辑设计哲学上的差异。

关键洞察
  1. VSCode 的远程编辑会通过 SSH 下载并运行一个代理,包括 Node 二进制安装。
  2. 该代理建立 WebSockets 连接,能游荡文件系统、编辑任意文件、启动 shell PTY 并持久化自身。
  3. 这种代理行为在安全界有特定名称,作者暗示其类似恶意软件。
转成行动

深入阅读

正文与原文对照

原文保真覆盖:全文原文字符:3120

我们想接入 VSCode 通过 SSH 做远程编辑所用的流程,因为现在人人都在用 VSCode,尤其是在用那些借助 LLM 生成代码的 VSCode 分支版本。

LLM 把代码写错,我们管它叫“幻觉”;人把代码写错,我们管它叫“工程”。

如果你清楚自己在做什么,LLM 生成的代码在一般情况下就很有用。但如果你能让 LLM 与执行环境形成闭环(也就是“Agent”架构),它就会格外好用。这件事可说的很多,不过眼下先说一点:这是对付幻觉的一剂半有效的解药——LLM 生成代码,智能体脚手架运行代码,代码报出错误,智能体再把错误反馈给 LLM,如此反复迭代。

所以,问题显而易见:你不会希望这种迭代式开发过程发生在自己的开发笔记本上,因为 LLM 缺乏边界感,它改起你的系统配置来,会和改你正在做的那个 Git 项目一样乐此不疲。你真正想要的是:为 LLM 运行一套闭环的、智能体式(“agentic”?现在是这么说的吗)的配置,跑在一个能瞬间启动、绝对坑不了你的全新 Linux 实例上。你应该明白我们要往哪儿去了。

不过!我想先表达一点担忧。

Emacs 里有远程编辑系统的精神先驱,一大坨极其好用的 Elisp,名叫“Tramp”。只要你能把 Tramp 接到任何一种能运行 Bourne shell 命令的交互式环境(通常是一个 SSH 会话)上,它就能把 Emacs 延伸到那个环境里。

VSCode 也有一个类似 Tramp 的功能。挺不错,对吧?你大概会以为,就是拿 Tramp 来,稍微简化一下,把 Elisp 换成 Typescript。

你想错了!

Tramp 是就地取材、依托远程连接本身工作的,VSCode 却是发动全面入侵:它先运行一段 Bash 引导脚本,下载一个智能体,其中还包括一份 Node 的二进制安装。

我想这就是源代码?

这个智能体通过端口转发的 SSH 运行。它会回连到你正在运行的 VSCode 前端,建立一条 WebSockets 连接。这条连接上的底层协议可以:

  • 在文件系统里随意游走
  • 编辑任意文件
  • 启动它自己的 shell PTY 进程
  • 让自己常驻

在安全领域,对按这种方式工作的工具有个专门的名字。我不会大声说出来,因为那对 VSCode 不公平,不过咱们就说,这个名字带着一股 murid 的味道吧。

让人用 VSCode 远程编辑开发服务器上的东西,我会有点紧张;要是在生产环境出事故的时候发生这种事,我会气得发狂。

事实证明,要在 VSCode 里连上自定义的 Fly Machine,我们根本不用在意这些,所以这一切在深层意义上都无关紧要。不过:我们已经决定重新做回一个博客了,所以我们得搞明白这些,现在你也知道了。