Tailscale 预共享密钥 authKey 轮换实操指南
Tailscale 的预共享密钥(Auth Key)主要用于节点首次认证或自动化加入网络。轮换的核心是在管理控制台或 API 生成新密钥并废止旧密钥,客户端仅用于使用新密钥重新认证。
先说结论:密钥轮换需在控制台或 API 操作,客户端仅用于使用新密钥重新认证。废止旧密钥不会断开已连接节点。
- 适合:自动化部署脚本、密钥泄露应急、定期安全合规。
- 先准备:拥有管理控制台访问权限或 API Key、备份当前节点状态。
- 验收:旧密钥失效无法加入新节点,新密钥可正常认证。
核心机制与风险预警
Auth Key 本质是“入场券”,而不是日常通信的会话密钥。节点一旦加入网络,会使用自身的机器密钥与控制平面保持连接。
高风险提示:在控制台废止(Revoke)旧 Auth Key,不会强制断开已连接的节点。若要彻底刷新节点身份,需配合节点重置操作(logout 后重新 up)。
控制台手动轮换
- 登录管理控制台:访问 Tailscale 管理后台,进入 Settings > Keys。
- 生成新密钥:点击 Generate auth key,设置有效期和权限(建议按最小权限原则设置 Tags)。
- 更新自动化配置:将新密钥更新到你的部署脚本、CI/CD 变量或配置管理工具中。
- 废止旧密钥:在控制台找到旧密钥,点击 Revoke。此时旧密钥无法再用于新节点认证。
API 自动化轮换
适合集成到 CI/CD 或自动化运维脚本中。需准备一个具备管理员权限的 API Key。
生成新密钥示例:
curl -X POST \
-H "Authorization: Bearer $TAILSCALE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"expiration": "2024-12-31T23:59:59Z", "capabilities": {"reusable": true}}' \
"https://api.tailscale.com/api/v2/tailnet/YOUR_TAILNET_NAME/keys"
废止旧密钥示例:
curl -X POST \
-H "Authorization: Bearer $TAILSCALE_API_KEY" \
"https://api.tailscale.com/api/v2/tailnet/YOUR_TAILNET_NAME/keys/YOUR_OLD_KEY_ID/revokes"
注意:API 返回的 key 字段仅显示一次,请务必立即安全存储。
客户端重新认证命令
客户端使用新密钥重新认证的命令格式:
tailscale up `--auth-key`=YOUR_NEW_KEY
注意:这通常用于节点重新加入或首次加入。已连接的节点密钥轮换主要依赖控制台废止旧 Key,若需强制刷新身份,需先执行 tailscale logout。
密钥存储与 systemd 配置
在生产环境中,避免将 Auth Key 明文写在脚本中。
- Secrets 管理:建议使用 HashiCorp Vault、AWS Secrets Manager 或 Kubernetes Secrets 存储密钥。
- systemd 环境变量:若使用 systemd 管理 Tailscale,可通过
EnvironmentFile加载密钥。
# /etc/default/tailscale
AUTH_KEY="tskey-auth-..."
更新密钥后,重载配置并重启服务:
systemctl daemon-reload
systemctl restart tailscaled
验证与排查
验证生效:在任意测试机器上使用旧密钥尝试加入网络,应返回认证失败错误。使用新密钥执行 tailscale up 应能成功连接并在控制台看到新节点。
检查状态:
tailscale status
确认节点在线且 IP 分配正常。
常见坑
- 密钥有效期:生成时未注意过期时间,导致自动化脚本后续运行失败。
- 权限过大:默认密钥可能拥有管理员权限,建议按最小权限原则设置 Tags。
- 日志泄露:确保脚本日志中不打印完整的 Auth Key,避免二次泄露。
- 并发冲突:轮换期间避免大规模同时重认证,以免触发控制平面速率限制。
- 误解废止效果:再次强调,废止 Auth Key 不影响已在线节点,勿误以为已完成安全隔离。