71 lines
3.2 KiB
Markdown
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.).
|