Files

71 lines
3.2 KiB
Markdown

---
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.).