关于 join-tailnet
Join Tailnet 是用于将 exe.dev VM 加入 IV Tailscale tailnet 的技能。它会临时附加所需集成以完成加入,之后再解除,并检查是否已有集成附加。
主要功能
- 01将 exe.dev VM 加入 tailnet
- 02检查是否已有集成附加
- 03附加并解除加入凭据
- 04按需启动 tailscaled
- 05使用临时预授权密钥
适用场景
- 01将 VM 加入 IV Tailscale tailnet
- 02在没有长期授权时加入 VM
- 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 技能中的加入建议为何不适用于此机群。
名称相同,调用方不同;请将它们分开,不要用一个覆盖另一个。
此脚本现在会:
- 检查 VM 是否已附加
api-tailscale。如果已附加,则保持原样,并跳过步骤 4。 - 将
api-tailscale附加到vm:<name>。 - 通过
*.exe.xyzSSH 登录,确保tailscaled正在运行,通过代理交换 OAuth 令牌,针对公共 API 签发一次性预授权临时密钥,然后运行tailscale up。 - 退出时分离
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-provisionretiring.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 秒后再尝试一次。