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

3.7 KiB

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 sparkPermission 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):

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

    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:

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.