mcpField
J
join-tailnet

join-tailnet

github.com/kylelundstedt云与 DevOps49 次安装
代码仓库

关于 join-tailnet

Join Tailnet 是用于将 exe.dev VM 加入 IV Tailscale tailnet 的技能。它会临时附加所需集成以完成加入,之后再解除,并检查是否已有集成附加。

主要功能

  1. 01将 exe.dev VM 加入 tailnet
  2. 02检查是否已有集成附加
  3. 03附加并解除加入凭据
  4. 04按需启动 tailscaled
  5. 05使用临时预授权密钥

适用场景

  1. 01将 VM 加入 IV Tailscale tailnet
  2. 02在没有长期授权时加入 VM
  3. 03临时节点被移除后重新加入

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/kylelundstedt/dotfiles --skill join-tailnet

安装后在 Claude Code 中输入/join-tailnet确认已加载。

附带文件join-tailnet.sh

详细介绍

加入 Tailnet

将 exe.dev VM 加入 IV Tailscale tailnet。

用法

运行此辅助脚本。它会完成所有操作,包括附加和分离凭据:

~/.agents/skills/join-tailnet/join-tailnet.sh <vm-name>

然后确认 VM 出现在 tailscale status 中。加入后,其他操作都使用 ssh <vm>(Tailscale SSH)。

为什么使用脚本,而不是直接运行命令

api-tailscale(原名 tailscale-api)通过两种方式附加(已于 2026-09-15 确定;相关约定见 iv-provision 中的 tailnet.md):

  • 私有开发 VM通过 exe.dev 标签 tailnet 获得持续授权,因为浏览器驱动的 create-vm 技能只能在创建时(new)修复问题(其令牌无法附加或分离凭据)。开发 VM 是私有的,因此暴露范围与 VM 本身相同。
  • 任何面向互联网的 VM,以及每个生产通道的部署目标,都使用按 VM 设定时限的授权 — ssh exe.dev integrations attach api-tailscale vm:<vm> --for 30m — 绝不使用标签。2026-07-28 的修复正是针对这个问题:auto:all 曾让面向公众的 rss-feed 和 telnyx-vm 获得密钥签发权限(从 rss-feed 进行的令牌交换返回了 HTTP 200),而在 2026-08-19 至 2026-09-15 期间,tailnet 标签又悄悄让它们重新获得了该权限。已于 2026-09-15 再次移除(在四台 公共 VM 上运行 tag -d <vm> tailnet)。

此脚本是第三种方式 — 从 mini 为没有上述任一授权的 VM 一次性加入:在加入期间附加,完成后分离。

这是控制平面版本:它需要 exe.dev 权限来附加和分离,而 VM 本身没有此权限。VM 侧版本 — 适用于已通过 tailnet 标签获得 api-tailscale 的 VM — 是 iv-provision 中的 skills-local/join-tailnet,其中也说明了预检步骤,以及 vendored tailscale 技能中的加入建议为何不适用于此机群。 名称相同,调用方不同;请将它们分开,不要用一个覆盖另一个。

此脚本现在会:

  1. 检查 VM 是否已附加 api-tailscale。如果已附加,则保持原样,并跳过步骤 4。
  2. 将 api-tailscale 附加到 vm:<name>。
  3. 通过 *.exe.xyz SSH 登录,确保 tailscaled 正在运行,通过代理交换 OAuth 令牌,针对公共 API 签发一次性预授权临时密钥,然后运行 tailscale up。
  4. 退出时分离 api-tailscale — 通过在出错和中断时都会触发的 trap,而不仅仅是在成功时触发。

因此,只有在使用授权时才会存在。如果分离失败,脚本会明确警告;运行 ssh exe.dev integrations list 可以看到遗留的 vm: 附加项。

不要手动运行旧的内联 curl 命令。 未附加时,令牌交换不会返回 access_token;接下来很容易手动附加 api-tailscale 后忘记分离,而这正是此更改移除的持续授权。

前提条件

  • VM 已存在,且可通过 <vm>.exe.xyz 访问。
  • VM 上已安装 curl 和 jq(标准 exeuntu 和 iv-image 都包含这两个工具;精简版 exeslim 基础镜像可能没有 — 在那里依赖此技能前请先检查)。
  • 脚本会启用并启动 tailscaled。标准 exeuntu 默认禁用该服务,因此不要假设它已在运行。
  • 你正在 klundstedt-mini 上运行,该主机负责 exe.dev 控制平面变更。

说明

  • 密钥以 ephemeral:true 方式生成,因此节点离线时间过长时会从 tailnet 中移除,必须重新运行此脚本才能重新加入。 对于必须能在中断后恢复的长期运行设备,请使用 IV_TAILSCALE_EPHEMERAL=false(于 2026-09-15 添加,用于 AgentsView 收集器重建):此时节点会保留;退役 VM 时,必须在管理控制台中删除该节点(iv-provision retiring.md §5)。
  • 创建 VM 时使用 --tag=iv 已不再足以或有必要用于加入 tailnet。它仍用于其他 tag:iv 集成。
  • Prod-lane 镜像会在启动时自行加入(自 exeslim 2026-08-23 起)。 exeslim(而非 exeslim-dev)镜像包含 iv-tailnet-join.service:首次启动时,它会探测 api-tailscale 代理;若已连接,则生成 tag:prod 密钥并加入。api-tailscale 已关联到 exe.dev 的 tailnet 标签,因此,在 exeslim VM 上运行 new --tag=tailnet,意味着它会在启动后数秒内以 tag:prod 身份加入 tailnet,此辅助程序随后会提前退出(“已在 tailnet 上”)。若要让此类 VM 使用 tag:dev:在该 VM 上运行 sudo tailscale logout,然后运行此辅助程序。此情况于 2026-09-15 在 iv-llm-relay 上观察到。
  • 自 exeslim 2026-09-15 起,Prod-lane 节点以 非临时 方式生成,因此设备首次启动后不再需要 API;若较早生成的临时 prod 节点在长时间中断后被回收,则需要连接 30 分钟,并通过 .exe.xyz 边缘节点运行 systemctl start iv-tailnet-join(或运行此脚本,这会使其使用 tag:dev)。

SSH 使用规范

  • 一次只进行一项 SSH 尝试。 切勿并行 SSH 连接到 *.exe.xyz。
  • 若 SSH 失败,请等待 30–60 秒后再尝试一次。

评论

支持 Markdown