面向Google编程CHARLES ZHANG

AI DAILY / 2026-09-24

VSCode 的 SSH Agent 实现剖析

VSCode's SSH Agent Is Bananas (2025)

Agent 开发Hacker News · 2026-09-23

全文中文翻译 · AI 生成,仅供学习交流

VSCode 的 SSH Agent 太离谱了 (2025)

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

> 「hallucination」是我们给 LLM 写错代码起的名字;「engineering」是我们给自己写代码起的名字。

如果你心里有数,LLM 生成的代码大体上是有用的。但如果你能在 LLM 和执行环境之间(靠一套「Agent」配置)形成闭环,那它就超级有用了。关于这点可说的很多,但眼下先说一句,它是针对幻觉的一份半有效解药。LLM 生成代码,agent 脚手架跑代码,代码报错,agent 把错误回喂给 LLM,过程循环迭代。

显然,你不会想让这种迭代式开发过程发生在自己的开发笔记本上,因为 LLM 有边界问题(译注:借心理学术语 "boundary issues",意指分不清什么能改、什么不能改),它们改起你的系统配置来,跟改你正在做的那个 Git 项目一样不亦乐乎。你真正想做的事,是在一台即开即用、白纸状态的 Linux 实例上,给 LLM 跑一套闭环的 agent-y(「agentic」?现在都这么说了吗?)配置,而且这台实例无论如何都坑不到你。你懂的。

总之!我想正式提一个担忧。

Emacs 拥有远程编辑系统的精神鼻祖,一团叫 Tramp 的超级有用的 Elisp 代码。只要把 Tramp 挂到任何一种交互式环境上(通常是 SSH 会话),而那个环境又能跑 Bourne shell 命令,Tramp 就能把 Emacs 延伸到那个环境里。

所以 VSCode 也有一个类似 Tramp 的功能。挺酷的吧?你大概会想,把 Tramp 拿来,稍微简化一下,把 Elisp 换成 Typescript。

可惜你想错了!

跟 Tramp 那种在远程连接上就地取材(译注:安全术语 "live off the land",指利用系统已有的工具来执行操作)不一样,VSCode 搞的是一场全面入侵。它跑一段 Bash 片段做 stager,去下载一个 agent,其中还包含一份 Node 的二进制安装。

我想这就是源码吧?

这个 agent 通过端口转发的 SSH 运行。它会跟正在跑的 VSCode 前端建立一条 WebSockets 连接。这条连接上的底层协议能干下面这些事。

- 在文件系统里到处晃悠
- 编辑任意文件
- 启动自己的 shell PTY 进程
- 让自己持久驻留在安全圈里,这类工具有一个专属名字。我不打算说出口,那对 VSCode 不太公平,但这么说吧,它的名字本身就带着 murid(译注:借动物分类学 Muridae,也就是 rat,委婉暗示它是 RAT,即远程访问工具/木马)。

让人们在开发服务器上用 VSCode 远程编辑,我会有些紧张;如果这种事发生在生产环境出事故的时候,我会气得暴跳如雷。

结果发现,要在 VSCode 里接通一台 Fly Machine 的自定义连接,上面这些全都不用关心,所以这些事谈不上有多要紧。不过呢,我们决定重新做回一个博客,所以我们学过这一遭,现在你也得跟着学一遍。

原文配图