Fase 2: 04_sanitize.py - scrubbing de secretos de skills/agentes/plans (10 secretos unicos, gate en verde)
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
---
|
||||
name: spark-ssh
|
||||
description: >-
|
||||
Conecta y ejecuta comandos en el servidor remoto "spark" vía SSH usando la variable de entorno
|
||||
SPARK_PASSWORD para la autenticación (spark no acepta key, solo password). Traduce rutas entre el
|
||||
volumen NFS /mnt/docker-nas/projects de spark y la carpeta ~/projects de este entorno de desarrollo
|
||||
(son el mismo storage compartido). Triggers: "conéctate a spark", "ejecuta esto en spark", "corre este
|
||||
comando en spark", "revisa spark", "spark ssh".
|
||||
effort: low
|
||||
argument-hint: "[comando o tarea a ejecutar en spark]"
|
||||
---
|
||||
|
||||
# spark-ssh — Ejecutar comandos remotos en spark vía SSH
|
||||
|
||||
## Contexto fijo
|
||||
|
||||
- El host `spark` ya está configurado en `~/.ssh/config` (`HostName <<SPARK_IP_1>>`, `User aleleba`) —
|
||||
nunca hace falta especificar user/host, basta `ssh spark`.
|
||||
- spark **no acepta autenticación por key**, solo por password. La password vive en la variable de
|
||||
entorno `$SPARK_PASSWORD` de este entorno de desarrollo.
|
||||
- `ssh` no tiene ninguna forma nativa de pasar una password por flag (`-p` es el puerto, no la
|
||||
password) — por eso se usa `sshpass` para automatizar el login.
|
||||
- spark tiene montado por NFS el volumen `/mnt/docker-nas`. Dentro de él,
|
||||
`/mnt/docker-nas/projects/<nombre>` **es exactamente el mismo storage** que `~/projects/<nombre>` en
|
||||
este entorno de desarrollo (compartido vía NAS). Un cambio hecho en un lado es instantáneamente visible
|
||||
en el otro.
|
||||
- En spark, los modelos (LLMs, checkpoints, etc.) se guardan en `/home/aleleba/models` — esta ruta es
|
||||
local a spark, no está compartida con este entorno de desarrollo.
|
||||
|
||||
## 1. Preflight — sshpass (una sola vez, idempotente)
|
||||
|
||||
```bash
|
||||
which sshpass >/dev/null 2>&1 || sudo apt-get install -y sshpass
|
||||
```
|
||||
|
||||
Si ya está instalado (lo estará después de la primera vez que se use esta skill), este paso no hace
|
||||
nada — no volver a instalar ni preguntar por ello.
|
||||
|
||||
## 2. Ejecutar un comando remoto
|
||||
|
||||
```bash
|
||||
SSHPASS="$SPARK_PASSWORD" sshpass -e ssh spark '<comando remoto>'
|
||||
```
|
||||
|
||||
- Usar siempre `sshpass -e` (lee la password de la variable de entorno `SSHPASS`), **nunca** `sshpass -p
|
||||
"$SPARK_PASSWORD"` — ese flag deja la password visible en la lista de procesos (`ps`).
|
||||
- Para comandos multilínea o con comillas complejas, usar un heredoc remoto en vez de escapar comillas:
|
||||
```bash
|
||||
SSHPASS="$SPARK_PASSWORD" sshpass -e ssh spark bash -s <<'EOF'
|
||||
comando1
|
||||
comando2
|
||||
EOF
|
||||
```
|
||||
|
||||
## 3. Rutas — proyectos compartidos
|
||||
|
||||
Si el comando remoto opera sobre un proyecto que también existe localmente en `~/projects/<nombre>`, la
|
||||
ruta equivalente en spark es `/mnt/docker-nas/projects/<nombre>`.
|
||||
|
||||
- Para **editar código** de esos proyectos, preferir las tools locales (Read/Edit) ya que es el mismo
|
||||
filesystem — no hace falta editar por SSH.
|
||||
- Usar SSH solo para **ejecutar** cosas que realmente necesitan correr en spark (builds, procesos,
|
||||
comandos específicos del entorno/hardware de spark, por ejemplo GPU/Spark jobs).
|
||||
|
||||
## Seguridad
|
||||
|
||||
- Nunca imprimir, loggear ni commitear el valor de `$SPARK_PASSWORD`.
|
||||
- Aplican las reglas generales de acciones riesgosas: confirmar con el usuario antes de ejecutar en spark
|
||||
comandos destructivos o de alto impacto (`rm -rf`, `docker rm`/`docker system prune`, `kill -9`,
|
||||
reinicios de servicios, etc.).
|
||||
Reference in New Issue
Block a user