Files
qwen3-6-lora/data/raw/sanitized/plans/quiero-crear-una-skill-bright-honey.md
T

74 lines
3.7 KiB
Markdown

# Plan: skill `spark-ssh` para conectarse y ejecutar comandos en spark vía SSH
## Contexto
El usuario quiere que Claude Code pueda operar directamente sobre su servidor "spark" (<<SPARK_IP_1>>)
ejecutando comandos remotos vía SSH, sin tener que pedir manualmente la contraseña cada vez. Verificado
en el entorno actual:
- `~/.ssh/config` ya tiene un host `spark` configurado (`HostName <<SPARK_IP_1>>`, `User aleleba`), pero
la autenticación falla por key (`ssh -o BatchMode=yes spark``Permission denied (publickey,password)`)
— spark solo acepta password.
- La variable de entorno `SPARK_PASSWORD` ya existe en este entorno de desarrollo.
- `sshpass` **no está instalado**, pero está disponible vía `apt` (`sshpass 1.09-1`) y hay sudo sin
password (`sudo -n true` → OK), así que se puede instalar como parte del preflight de la skill.
- `/mnt/docker-nas` no existe en este entorno de desarrollo — es un mount NFS que solo existe **del lado
de spark**. Dentro de él, `/mnt/docker-nas/projects` es el mismo storage que `~/projects` aquí. Es
decir: un proyecto en `~/projects/<nombre>` en este entorno de desarrollo es exactamente
`/mnt/docker-nas/projects/<nombre>` visto desde spark (mismo filesystem compartido vía NAS).
El objetivo es crear una skill global (en `~/.claude/skills/`, siguiendo el patrón de las skills
existentes como `web-ui-test`, `aleleba-pr`) que documente el patrón de conexión y las convenciones de
seguridad/rutas para que Claude la use de forma consistente cada vez que el usuario pida ejecutar algo en
spark.
## Archivo a crear
`~/.claude/skills/spark-ssh/SKILL.md`
## Contenido de la skill
**Frontmatter:**
- `name: spark-ssh`
- `description`: explica que conecta a spark por SSH con password vía `SPARK_PASSWORD`, y que traduce
rutas entre `/mnt/docker-nas/projects` (en spark) y `~/projects` (en este entorno). Incluye triggers en
español: "conéctate a spark", "ejecuta esto en spark", "corre este comando en spark", "revisa spark".
- `effort: low`
- `argument-hint: "[comando o tarea a ejecutar en spark]"`
**Cuerpo (en español, consistente con el resto de skills del usuario):**
1. **Contexto fijo**: host `spark` ya está en `~/.ssh/config`; autenticación es por password (no key);
password vive en `$SPARK_PASSWORD`; mapeo de rutas `~/projects/<x>``/mnt/docker-nas/projects/<x>`.
2. **Preflight — instalar `sshpass` si falta** (idempotente):
```bash
which sshpass >/dev/null 2>&1 || sudo apt-get install -y sshpass
```
3. **Ejecutar un comando remoto**, usando siempre `sshpass -e` (nunca `-p`, que expone la password en
`ps`):
```bash
SSHPASS="$SPARK_PASSWORD" sshpass -e ssh spark '<comando remoto>'
```
Para comandos multilínea o con comillas complejas, usar heredoc remoto vía `ssh spark bash -s <<'EOF'`.
4. **Regla de rutas compartidas**: 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; usar SSH solo para **ejecutar** (builds, procesos, comandos
específicos del entorno/hardware de spark).
5. **Seguridad**: nunca imprimir/loggear `$SPARK_PASSWORD`; aplicar las reglas generales de confirmación
antes de comandos destructivos ejecutados en spark (rm -rf, docker rm, kill, etc.).
## Verificación
Después de crear el archivo:
```bash
which sshpass >/dev/null 2>&1 || sudo apt-get install -y sshpass
SSHPASS="$SPARK_PASSWORD" sshpass -e ssh spark 'hostname && whoami && ls /mnt/docker-nas/projects | head -5'
```
Confirmar que devuelve el hostname de spark y que `/mnt/docker-nas/projects` lista el mismo contenido que
`~/projects` localmente.