--- 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 <>`, `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/` **es exactamente el mismo storage** que `~/projects/` 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 '' ``` - 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/`, la ruta equivalente en spark es `/mnt/docker-nas/projects/`. - 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.).