Skip to main content
← Back to list
01Issue
FeatureOpenExtensions
AssigneesNone

Relationships

#592 Feature request: @swamp/tailscale extension

Opened by bixu · 6/8/2026

Problem

There is no official @swamp/tailscale extension. The only Tailscale extension in the registry is @keeb/tailscale/node, which:

  • Hardcodes Alpine Linux (apk add tailscale) — unusable on immutable-root distros (SL-Micro, Flatcar, Talos)
  • Bundles its own SSH library instead of using @swamp/ssh
  • Does not verify the Tailscale binary (no sha256 check)
  • Does not enable Tailscale SSH (--ssh flag not passed to tailscale up)
  • Does not mark authKey as sensitive (leaks into run records)
  • Has no sshd hardening capability
  • Has no idempotency checking (changed: bool)

Proposed solution

An official @swamp/tailscale extension that builds on @swamp/ssh for transport and covers the full Tailscale node lifecycle:

  1. installStatic — download the official tarball from pkgs.tailscale.com/stable/, verify sha256 before extraction, install binaries to a configurable persistent path (default /usr/local/bin/), install systemd unit, daemon-reload, enable --now tailscaled. Paired version + sha256 constants. Idempotent: skip if already installed at the pinned version (changed: false).

  2. bringUptailscale up --ssh --reset --auth-key=file:/dev/stdin --advertise-tags=<csv> with the auth key piped via stdin (never on disk, argv, or env var on the target host). authKey marked meta({ sensitive: true }) for redaction. Idempotent via --reset.

  3. hardenSshPassword — preflight self-test (tailscale ssh rancher@$(tailscale ip -4) 'echo TS_SSH_OK') before writing /etc/ssh/sshd_config.d/50-tailscale.conf (PasswordAuthentication no, KbdInteractiveAuthentication no). Validate with sshd -t, reload on success, rollback drop-in on failure. Idempotent: digest-compare before write (changed: false on match).

  4. Fleet-aware host selectors — inherit @swamp/ssh's selector model (name, tag, CEL expression, all) so a single model instance can target subsets of a fleet.

Use case

We are rolling out Tailscale SSH to a Harvester bare-metal fleet running SL-Micro 6.1 (immutable root, zypper only, no apt). @swamp/ssh handles the transport; the missing piece is the Tailscale-specific lifecycle on the target host.

Alternatives

  • @keeb/tailscale/node — Alpine-only, own SSH lib, no verification or hardening (see above).
  • Custom @hivemq/tailscale local extension — viable but the install/bring-up/harden pattern is generic enough to belong in the official extension set.
  • Ansible — requires Python on the target host; SL-Micro's immutable root makes Python installation non-trivial (transactional-update + reboot, or static binary workaround). Known Ansible bugs with transactional-update and read-only filesystems.
02Bog Flow
OPENTRIAGEDIN PROGRESSSHIPPED

Open

6/8/2026, 1:28:16 PM

No activity in this phase yet.

03Sludge Pulse

Sign in to post a ripple.