
🔨 Ein moderner, plattformübergreifender Maschinenmanager
Ein Host-Management-Hub für Flotten von Linux-Maschinen. Installieren Sie den Platypus-Agenten auf jedem Host, den Sie besitzen; der Agent baut eine Verbindung zu Ihrem Platypus-Server über TLS + Protobuf auf; vom Server aus erhalten Sie eine interaktive Shell, Dateiverwaltung und Netzwerk-Tunneling auf jedem verwalteten Host – über eine zentrale Steuerungsebene.
Eine Vercel-ähnliche Flat-Nav-Oberfläche mit einem Projekt-Dashboard, einem Host-/Listener-/Session-Browser, einer Multi-Host-Dispatch-Konsole und einem Admin-Benutzer-Manager. Die vollständige Galerie finden Sie unter docs/screenshots/. Führen Sie make screenshots erneut aus, um sie aus der Live-App neu zu generieren.
Platypus wird als zwei Backend-Binärdateien plus einem eigenständigen Desktop-Client ausgeliefert:
| Binary | Rolle |
|---|---|
platypus-server | Daemon. Nimmt eingehende Agentenverbindungen auf TLS-Eingangsports entgegen; stellt eine REST + WebSocket API für Admin-Tools bereit; stellt Agenten-Binärdateien zur Verteilung bereit. |
platypus-agent | Der Prozess, der auf jedem verwalteten Host läuft. Baut eine Verbindung zum Server über TLS + Protobuf auf. |
platypus-desktop | Native (Wails v2) Desktop-GUI. Verbinden Sie sich mit jedem erreichbaren Server mit URL + Secret; tabbasierte UI für Sessions, Terminals, Listener, Dateien, Tunnel. Siehe desktop/. |
Der Server ist rein eine API – keine eingebettete Web-UI. Mehrere Desktops können sich gleichzeitig mit demselben Server verbinden.
config.yml startenDer schnellste Weg, ein vollständiges Platypus-System zum Laufen zu bringen (einschließlich Server, Web-UI und eines MinIO-gestützten Agenten-Verteilers), ist die Verwendung von Docker Compose:
git clone https://github.com/WangYihang/Platypus
cd Platypus
docker-compose up -d
https://localhost:9443 in Ihrem Browser (der Container wird mit einem selbstsignierten Zertifikat ausgeliefert; Ihr Browser fordert Sie auf, es beim ersten Besuch zu akzeptieren).bootstrap_secret wird beim ersten Start in /app/data/bootstrap.secret im Container geschrieben (Modus 0600). Lesen Sie es mit docker compose exec platypus-server cat /app/data/bootstrap.secret, verwenden Sie es einmal, um den ersten Administrator zu erstellen, und löschen Sie dann die Datei. Nach Abschluss des Bootstraps wird das Secret nicht mehr akzeptiert.curl ... | sh-Befehl zu erhalten, der mit der Projekt-CA signiert und verankert ist, um Agenten in Ihrer Flotte bereitzustellen.Erfordert Go 1.24+ und protoc (nur wenn Sie Protobuf-Code neu generieren).
git clone https://github.com/WangYihang/Platypus
cd Platypus
make build # → ./build/{platypus-server,platypus-agent}
Andere nützliche Ziele: make test, make lint, make snapshot (plattformübergreifend über goreleaser), make help.
Mitwirkende sollten die Git-Hooks installieren, damit gofmt / goimports / go vet / golangci-lint vor jedem Commit ausgeführt werden:
pip install pre-commit # or: pipx install pre-commit
make hooks # one-time: wires .git/hooks/pre-commit
make pre-commit # optional: run all hooks against every file now
Erfordert Node 22+, Wails CLI-Abhängigkeiten (wails doctor) und die WebView-Bibliotheken der Plattform (webkit2gtk-4.1 unter Linux, WebView2 unter Windows, WKWebView unter macOS).
make desktop-deps # one-time: install Wails CLI + pnpm packages
make desktop-build # → desktop/build/bin/platypus-desktop
make desktop-dev # hot-reload dev mode
Gleiche Seiten, gleiche Funktionen (minus Echtzeit-Ereignis-Push), läuft in jedem Browser:
make web-ui # → desktop/frontend/dist-web/ (static bundle)
make web-ui-serve # preview at http://localhost:8080
dist-web/ ist vollständig statisch; legen Sie es auf GitHub Pages / S3 / nginx ab. Verweisen Sie es über das Anmeldeformular auf einen beliebigen platypus-server.
Vollständige Hinweise in desktop/README.md.
Laden Sie das entsprechende Archiv für Ihr Betriebssystem/Ihre Architektur von der Releases-Seite herunter, entpacken Sie es und führen Sie es aus.
docker build -t platypus-server .
docker run --rm -p 9443:9443 \
-e PLATYPUS_DEV=1 \
-v $(pwd)/config.yml:/config.yml \
platypus-server
PLATYPUS_DEV=1 aktiviert den KEK-Fallback auf der Festplatte, sodass ein Neustart "einfach funktioniert"; für die Produktion entfernen Sie diese Umgebungsvariable und setzen stattdessen PLATYPUS_CA_KEK (32 Bytes hex; openssl rand -hex 32), damit der Verschlüsselungsschlüssel des CA-Private-Key nie neben der verschlüsselten Datenbank geschrieben wird.
./build/platypus-server # foreground; Ctrl-C for graceful shutdown
Für die Produktion führen Sie den Server unter systemd aus, anstatt ihn manuell im Hintergrund laufen zu lassen.
platypus-server gegen dieselbe Datenbank aus, bis der prozessübergreifende Widerruf implementiert ist. Vertikale Skalierung + ein HA-Standby ist die unterstützte Form; horizontale Lastverteilungs-Replicas werden nicht unterstützt.PLATYPUS_DEV=1 ist ebenfalls gesetzt (was einen nur für die Entwicklung bestimmten On-Disk-Fallback unter <data-dir>/ca.kek aktiviert – unsicher für die Produktion, da Chiffrat und Schlüssel auf demselben Volume landen).distributor.store.endpoint gesetzt), setzen Sie PLATYPUS_DISTRIBUTOR_STORE_ACCESS_KEY_ID und PLATYPUS_DISTRIBUTOR_STORE_SECRET_ACCESS_KEY, anstatt sie in config.yml zu hinterlegen. Die mitgelieferte config.docker.yml enthält die YAML-Felder aus diesem Grund leer.192.168.88.129
0.0.0.0:9443192.168.88.130 (führt platypus-agent aus)Führen Sie zuerst ./platypus-server aus. Eine config.yml wird aus assets/config.example.yml generiert, falls keine vorhanden ist. Die Standardeinstellungen sind sinnvoll.
Um einen neuen verwalteten Host anzumelden:
Der serverseitig gerenderte Einzeiler sieht so aus:
curl -fsSL https://<server>:9443/api/v1/install/<one-shot-token> | sh
Das Einmal-Installationstoken läuft kurz nach der Ausstellung ab und wird beim ersten erfolgreichen Treffer verbraucht. Das vom Server zurückgegebene Skript:
curl --cacert verifiziert wird (kein -k, kein TOFU);PLATYPUS_INSECURE_DOWNLOAD=1.Schreiben Sie keine
curl http://...-URLs von Hand gegen den veralteten/agent/<host>:<port>-Pfad – dieser Ablauf wurde entfernt. Rendern Sie den Installationsbefehl immer über die UI, damit er den Vertrauensanker enthält.
Öffnen Sie die Desktop-App (platypus-desktop) oder die Web-UI (make web-ui-serve), geben Sie die Server-URL und das Secret ein, und schon sind Sie drin. Tabs: Sitzungen (jeder Agent, der verbunden ist), Terminal, Dateien, Tunnel, Listener.
Danke an alle unsere Unterstützer! 🙏 [Unterstützer werden]
Unterstützen Sie dieses Projekt, indem Sie Sponsor werden. Ihr Logo wird hier mit einem Link zu Ihrer Website erscheinen. [Sponsor werden]