这是仅供 VS Code 使用的 Remote-SSH 安装接管扩展,不提供 PowerShell 模块或命令行安装入口。勾选哪些主机,哪些主机的远程服务器就由本扩展来装。对勾选的主机,Remote-SSH 每次连接前都由本扩展安装远程服务器(本地下载+上传与远程自下载竞速、旧 glibc 自动部署官方 sysroot、CLI 引导预装),Remote-SSH 自带的安装步骤检测到服务端已就位便直接复用;未勾选的主机完全保持 Remote-SSH 自带安装。没有总开关:勾选哪些主机就接管/保活哪些主机,两份清单都为空即整体还原。
功能特性
- 逐主机勾选:命令「RemoteSSH服务器安装: 选择接管与保活的主机…」连续弹两个多选列表(实时扫描
~/.ssh/config,含 Include 展开),先勾接管安装、再勾服务保活,结果分别存进设置「接管的主机」与「启用保活的主机」;直接在设置里编辑清单也等效,保存即生效
- 选择性隔离:勾选接管的主机由本扩展接管安装,未勾选的主机完全不动、保持 Remote-SSH 自带安装
- 服务保活可选、连接时自动检修:勾选保活的主机每次连接(preconnect)都幂等检修保活包装(已部署跳过、旧版升级、CLI 缺失自动下载真身再包装)——VS Code 更新到新提交号后下一次连接自动补上,不再需要手动执行保活操作;与接管相互独立、可重叠
- 勾选即替换:被接管主机的远程服务器一律由本扩展安装,Remote-SSH 自带安装步骤不再产出任何东西
- 有原脚本先问你:主机接管前已配置外部 preconnect 脚本时不会自动套壳,逐个弹窗二选一——①直接覆盖(原脚本引用丢弃,不可恢复);②复制一行调用代码到剪贴板,由你粘贴进原脚本(调用链:Remote-SSH → 你的脚本 → 接管安装,你的配置一概不动)。选②的主机在还原时扩展同样不做任何事,只提示你手动删除那一行
- 取消勾选即还原:取消勾选的主机恢复 Remote-SSH 自带安装;两份清单都清空即摘掉指向本扩展的钩子、删除生成的脚本,全部恢复自带安装
- 失败如实暴露:接管或免密探测失败会中止本次连接并给出一行明确原因,绝不静默回退(preconnect 的标准输入是 ignore,交互输密码不可能)
使用方法
- 运行命令「RemoteSSH服务器安装: 选择接管与保活的主机…」,先勾选接管安装的主机、再勾选要启用服务保活的主机(两组独立、可重叠)。若某主机接管前已有 preconnect 脚本,会弹窗让你选择覆盖丢弃还是复制调用代码自行粘贴。
- 之后勾选主机每次连接都先经本扩展安装远程服务器。每台主机首次连接时 VS Code 会弹一次 preconnect 脚本授权确认,选「Allow and Don't Ask Again」即可。
- 取消勾选个别主机即恢复该主机的自带安装;两份清单都清空即全部还原。
工作原理
Remote-SSH 提供 remote.SSH.preconnect 设置:连接发起前在本机执行一个脚本(Windows 上必须是 .ps1,以 powershell.exe -NoProfile -ExecutionPolicy Bypass -File 调用、不带任何参数、不注入环境变量、标准输入是 ignore,脚本运行时无法得知自己被哪台主机触发;非零退出会中止连接)。本扩展开启接管后,把该设置里勾选主机的条目指向按主机生成的薄脚本,脚本调用扩展私有的 scripts/安装实现.ps1 先把远程服务器装好;Remote-SSH 自带安装步骤随后发现服务端已就位便直接复用——安装由此被本扩展替换。取消全部勾选则摘掉指向本扩展的条目、删除生成脚本,Remote-SSH 便重新按自带方式安装。
CLI 与服务端的竞速按相同顺序串行推进:先完成 CLI 的本地/远程竞速,再开始服务端竞速,不会出现本地并行下载两个产物而远程仍停在 CLI 的阶段错配;每个产物内部仍是本地下载+上传与远程自下载并行。sysroot 素材属于安装前的独立阶段,不受这条 CLI/服务端顺序限制。
接管脚本由扩展按主机生成在扩展的全局存储目录,职责拆成三个文件:
| 文件 |
内容 |
是否参与授权哈希 |
接管安装-<主机>.ps1 |
薄脚本:只有主机名与一行调用,逐字节稳定 |
是(内容变化会重新弹窗) |
接管安装实现.ps1 |
全部实际逻辑,从扩展目录原样复制 |
否 |
接管安装配置.json |
扩展安装脚本路径、发布通道与各主机启用的能力(接管安装 / 服务保活) |
否 |
薄脚本靠 $PSScriptRoot 找同目录的实现文件,所以扩展升级换目录也不会改变薄脚本内容;而逻辑与路径信息都放在后两个文件里,日后改进逻辑无需重新确认授权。本扩展从不自动执行接管前已存在的 preconnect 脚本:是覆盖丢弃(不可恢复),还是复制一行调用代码由你粘贴进原脚本(此后 Remote-SSH 调你的脚本、你的脚本再调入接管安装),在勾选主机时由你逐个决定,决策只问一次;选后者的主机在还原时扩展不动你的任何文件,只提示手动删除那一行(在删除前,那些主机仍会经那一行由本扩展安装)。
本扩展生成的 preconnect 薄脚本使用本机绝对路径,并自动把 remote.SSH.preconnect 追加到 settingsSync.ignoredSettings:脚本与 Remote-SSH 授权记录都留在本机,不会随 Settings Sync 把旧机器、旧用户目录带到另一台机器。追加只影响这一项,不会覆盖其它同步忽略设置;取消全部接管时,如果这项忽略是扩展添加且之后没有被改动,会一并撤销。旧版本写入的其它用户目录绝对路径或 ~/... 路径会在对齐时自动迁移,不会误当成你的外部脚本。首次打开远程窗口时,扩展会在 Remote-SSH 解析前激活并启动对齐,不等待可能阻塞的配置写入;脚本生成与路径迁移随后完成,曾被删除的脚本也会重建。
注意事项
- 还原的是「安装方式」:Remote-SSH 恢复自带安装;已由本扩展装好的服务端原样保留(与自带安装产物同构,无需重装)。
- 接管期间请不要手动改写
remote.SSH.preconnect,该设置由本扩展管理;取消勾选时会摘掉指向本扩展的条目。选择了「覆盖」的主机,其原脚本引用已丢弃、不会回填;选择了「复制调用代码」的主机,还原时需你手动删掉粘贴进原脚本的那一行(扩展会提示,不代劳)。
- 免密登录(密钥认证)是接管的硬性前提:preconnect 的标准输入是
ignore,需要交互输密码的主机根本无法静默安装。接管脚本探测不到免密登录时会直接报错并以非零退出码中止本次连接,不会静默退回 Remote-SSH 自带安装——让「这台主机没配密钥认证」立刻暴露,而不是被掩盖成一次缓慢的自带安装。请为该主机配置密钥认证,或取消勾选该主机改用自带安装。
- 单会话建立、环境探测和报告校验任一环失败都会直接报错并中止,不再回退离散 SSH 或逐项试探;缺少登录目录、平台版本等必要字段时会指出缺失字段,不会把 Linux 误判为 Windows 后继续安装。
- VS Code 更新到新提交号后的首次连接同样由本扩展安装对应版本,无需手动干预。启用保活的主机每次连接都会自动检修保活包装(新提交号当次连接不受保护,下一次连接自动补上),无需手动执行保活操作。旧 glibc 主机上的原生模块补丁(
*.node)需要用 server 自带的 node 做加载验证:本扩展会按官方同款两步补丁(先 RPATH 后解释器,规避 patchelf 的已知损坏缺陷 NixOS/patchelf#524)在临时副本上把 node 补好、验证能跑才原子替换,因此新版本首次接管即可完成原生补丁;仅当补丁验证失败时才延后并提示(此时原件保持不动)。
| |