# ts-menu — Tailscale Geräteverwaltung Kleines interaktives Kommandozeilen-Tool, um einzelne Geräte im eigenen Tailscale-Netz per Menü zu sperren (vom Tailnet trennen) und wieder zuzulassen. ![gum](https://img.shields.io/badge/UI-gum-ff69b4) ## Voraussetzungen | Tool | Zweck | Installation | |------|-------|---------------| | [`gum`](https://github.com/charmbracelet/gum) | Menüführung / UI | `brew install gum` (macOS) oder siehe [Charm-Repos](https://github.com/charmbracelet/gum#installation) (Linux) | | `curl` | API-Requests | meist vorinstalliert | | `jq` | JSON-Verarbeitung | `apt install jq` / `brew install jq` | Außerdem brauchst du einen **Tailscale API-Access-Token**: 1. Admin-Konsole öffnen: 2. **Generate access token** klicken 3. Token kopieren (wird nur einmal angezeigt!) ## Installation ```bash chmod +x ts-menu.sh ``` Optional irgendwo in den `PATH` legen, z. B.: ```bash mkdir -p ~/.local/bin cp ts-menu.sh ~/.local/bin/ts-menu ``` ## Konfiguration Lege eine Datei `~/.ts-toggle.conf` an: ```bash TAILSCALE_API_KEY="tskey-api-xxxxxxxxxxxx" TAILSCALE_TAILNET="deine-org.ts.net" ``` - `TAILSCALE_API_KEY` — dein Access-Token von oben - `TAILSCALE_TAILNET` — Name deines Tailnets (in der Admin-Konsole oben links sichtbar, z. B. `beispiel@gmail.com` oder `deine-firma.ts.net`) > ⚠️ Diese Datei enthält ein sensibles API-Token. Zugriffsrechte > einschränken, z. B. mit `chmod 600 ~/.ts-toggle.conf`. Alternativ lassen sich beide Werte auch als Umgebungsvariablen setzen, statt sie in die Datei zu schreiben: ```bash export TAILSCALE_API_KEY="tskey-api-xxxxxxxxxxxx" export TAILSCALE_TAILNET="deine-org.ts.net" ``` ## Nutzung ```bash ./ts-menu.sh ``` Du landest im Hauptmenü mit drei Optionen: - **Gerät sperren/entsperren** — wählt ein Gerät aus der Liste (Status wird direkt angezeigt), erkennt automatisch den aktuellen Zustand und schlägt die passende Gegenaktion vor. Vor der Ausführung wird per Bestätigungsdialog nachgefragt. - **Geräteliste anzeigen** — zeigt alle Geräte des Tailnets mit Name, Betriebssystem und Status in einer Tabelle. - **Beenden** — verlässt das Programm. ## Wie das Sperren funktioniert Ein gesperrtes Gerät wird über die Tailscale-API **deautorisiert** (`authorized: false`). Das trennt es sofort und vollständig vom Tailnet — es hat dann zu keinem anderen Gerät mehr Verbindung, bis es wieder autorisiert wird. Das Gerät selbst bleibt in der Geräteliste sichtbar und kann jederzeit wieder freigeschaltet werden, ohne sich neu einzuloggen. > Hinweis: Das ist ein Alles-oder-nichts-Schalter pro Gerät. Für > feingranulare Regeln (z. B. "Gerät A darf nur mit B sprechen") braucht > es stattdessen ACL-Policies in der Admin-Konsole — das ist mit diesem > Tool nicht abgedeckt. ## Fehlerbehebung | Problem | Ursache | |---------|---------| | `Fehler: gum wird benötigt` | `gum` ist nicht installiert oder nicht im `PATH` | | `Konnte Geräteliste nicht laden` | API-Key falsch/abgelaufen oder `TAILSCALE_TAILNET` falsch | | `Fehler: TAILSCALE_API_KEY ist nicht gesetzt` | `~/.ts-toggle.conf` fehlt oder Variable nicht gesetzt | ## Dateien - `ts-menu.sh` — das interaktive Menü-Script - `~/.ts-toggle.conf` — deine lokale Konfiguration (nicht mit anderen teilen!)