
🔨 Un moderno administrador de máquinas multiplataforma
Un centro de gestión de hosts para flotas de máquinas Linux. Instala el agente Platypus en cada host que poseas; el agente se conecta de vuelta a tu servidor Platypus a través de TLS + protobuf; desde el servidor obtienes una shell interactiva, gestión de archivos y túneles de red en cada host gestionado — todo desde un único plano de control central.
Una interfaz de navegación plana estilo Vercel con un panel de proyecto, un navegador
de hosts/listeners/sesiones, una consola de envío multi-host y un gestor de usuarios
administrador. Consulta la galería completa en docs/screenshots/.
Vuelve a ejecutar make screenshots para regenerarlas desde la aplicación en vivo.
Platypus se distribuye como dos binarios de backend más un cliente de escritorio independiente:
| Binario | Rol |
|---|
El servidor es puramente una API — no tiene interfaz web integrada. Varios escritorios pueden conectarse al mismo servidor simultáneamente.
config.ymlLa forma más rápida de poner en marcha un sistema Platypus completo (incluyendo el Servidor, la Interfaz Web y un Distribuidor de Agentes respaldado por MinIO) es usando Docker Compose:
git clone https://github.com/WangYihang/Platypus
cd Platypus
docker-compose up -d
https://localhost:9443 en tu navegador (el
contenedor incluye un certificado autofirmado; tu navegador te pedirá
que lo aceptes en la primera visita).bootstrap_secret se escribe en
/app/data/bootstrap.secret dentro del contenedor en el primer arranque
(modo 0600). Léelo con
docker compose exec platypus-server cat /app/data/bootstrap.secret,
úsalo una vez para crear el primer administrador y luego elimina el archivo. Tras
completar el bootstrap, el secreto ya no será aceptado.curl ... | sh, firmado y vinculado a la CA del proyecto, para
desplegar agentes en tu flota.Requiere Go 1.24+ y protoc (solo si se regenera el código protobuf).
git clone https://github.com/WangYihang/Platypus
cd Platypus
make build # → ./build/{platypus-server,platypus-agent}
Otros targets útiles: make test, make lint, make snapshot (multiplataforma mediante goreleaser), make help.
Los colaboradores deben instalar los ganchos de git para que gofmt / goimports / go vet /
golangci-lint se ejecuten antes de cada commit:
pip install pre-commit # o: pipx install pre-commit
make hooks # una vez: configura .git/hooks/pre-commit
make pre-commit # opcional: ejecuta todos los ganchos sobre todos los archivos ahora
Requiere Node 22+, dependencias de Wails CLI (wails doctor) y las bibliotecas WebView de la plataforma (webkit2gtk-4.1 en Linux, WebView2 en Windows, WKWebView en macOS).
make desktop-deps # una vez: instala Wails CLI + paquetes pnpm
make desktop-build # → desktop/build/bin/platypus-desktop
make desktop-dev # modo desarrollo con recarga en caliente
Las mismas páginas, las mismas funciones (excepto la notificación de eventos en tiempo real), funciona en cualquier navegador:
make web-ui # → desktop/frontend/dist-web/ (paquete estático)
make web-ui-serve # vista previa en http://localhost:8080
dist-web/ es completamente estático; súbelo a GitHub Pages / S3 / nginx. Apúntalo a cualquier platypus-server mediante el formulario de inicio de sesión.
Notas completas en desktop/README.md.
Descarga el archivo adecuado para tu sistema operativo/arquitectura desde la página de versiones, extráelo y ejecútalo.
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 habilita la alternativa de KEK en disco para que un inicio
fresco "funcione sin más"; para producción, elimina esa variable de entorno y
establece PLATYPUS_CA_KEK (32 bytes en hex; openssl rand -hex 32) para que
la clave de cifrado de la clave privada de la CA nunca se escriba junto a la
base de datos cifrada.
./build/platypus-server # en primer plano; Ctrl-C para apagado ordenado
Para producción, ejecuta el servidor bajo systemd en lugar de ponerlo en segundo plano manualmente.
platypus-server contra la misma BD hasta que llegue la revocación entre procesos.
La escala vertical + una espera en alta disponibilidad es la forma compatible;
las réplicas horizontales con balanceo de carga no lo son.PLATYPUS_DEV=1
(que habilita una alternativa solo para desarrollo en disco en <data-dir>/ca.kek —
inseguro para producción porque el texto cifrado y la clave terminan en el
mismo volumen).distributor.store.endpoint establecido), establece
PLATYPUS_DISTRIBUTOR_STORE_ACCESS_KEY_ID y
PLATYPUS_DISTRIBUTOR_STORE_SECRET_ACCESS_KEY en lugar de incluirlos
en . El incluido se distribuye con
los campos YAML en blanco por esa razón.192.168.88.129
0.0.0.0:9443192.168.88.130 (ejecuta platypus-agent)Primero, ejecuta ./platypus-server. Se genera un config.yml a partir de
assets/config.example.yml si no existe ninguno. Los valores predeterminados son razonables.
Para inscribir un nuevo host gestionado:
El comando de una línea generado por el servidor tiene el siguiente aspecto:
curl -fsSL https://<server>:9443/api/v1/install/<one-shot-token> | sh
El token de instalación de un solo uso caduca poco después de su emisión y se consume en el primer acierto exitoso. El script que devuelve el servidor:
curl --cacert (sin -k, sin TOFU);PLATYPUS_INSECURE_DOWNLOAD=1.No escribas manualmente URLs
curl http://...contra la ruta/agent/<host>:<port>heredada — ese flujo se ha eliminado. Siempre renderiza el comando de instalación a través de la interfaz para que lleve el ancla de confianza.
Abre la aplicación de escritorio (platypus-desktop) o la interfaz web (make web-ui-serve),
rellena la URL del servidor y el secreto, y ya estás dentro. Pestañas: Sessions (cada
agente que se haya conectado), Terminal, Files, Tunnels, Listeners.
Este proyecto existe gracias a todas las personas que contribuyen.
Gracias a todos nuestros patrocinadores. 🙏 [Conviértete en patrocinador]
Apoya este proyecto convirtiéndote en sponsor. Tu logo aparecerá aquí con un enlace a tu sitio web. [Conviértete en sponsor]
platypus-server | Demonio. Acepta conexiones entrantes de agentes en puertos TLS de ingreso; expone una API REST + WebSocket para herramientas de administración; sirve los binarios del agente para su distribución. |
platypus-agent | El proceso que se ejecuta en cada host gestionado. Se conecta al servidor a través de TLS + protobuf. |
platypus-desktop | GUI de escritorio nativo (Wails v2). Conéctate a cualquier servidor accesible mediante URL + secreto; interfaz con pestañas para sesiones, terminales, listeners, archivos, túneles. Consulta desktop/. |
config.ymlconfig.docker.yml