Skip to content

v0.3.1 — Corregir el ssh-keyscan del instalador

Choose a tag to compare

@orl92 orl92 released this 07 Nov 20:02
· 78 commits to main since this release
e1b0350

Si vas a instalar, usá esta versión. El instalador de v0.3.0 imprime un comando que deja el known_hosts mal formado y el deploy falla con un mensaje que no señala la causa. v0.3.1 corrige sólo eso.

Corrección

El bloque «QUE FALTA» que install.sh imprime al terminar recomendaba un comando que corrompía el known_hosts:

ssh-keyscan -p 22 -H <host> 2>/dev/null | sed 's/^/|1 h=|/' > known_hosts

-H ya produce la forma hasheada (|1|HASH ...). El sed prefijaba cada línea — incluidos los comentarios # host:22 SSH-2.0-... — y el archivo dejaba de ser un known_hosts válido:

$ ssh-keygen -lf known_hosts
known_hosts is not a public key file.

Como el workflow escribe ese valor tal cual en UserKnownHostsFile y usa StrictHostKeyChecking=yes, el deploy fallaba con:

Host key verification failed.

Un mensaje que no dice que el secret está mal formado. El operador terminaba revisando la clave privada, el usuario o los permisos.

El comando correcto

ssh-keyscan -p 22 -H <host> 2>/dev/null > known_hosts

<host> tiene que ser exactamente el valor de DEPLOY_HOST. Con -H el nombre queda hasheado: un keyscan contra 192.168.1.10 no sirve si DEPLOY_HOST dice webcmp.local, y el síntoma es el mismo Host key verification failed.

Verificado contra github.com: sin el sed, ssh-keygen -lf lista los tres fingerprints y ssh pasa la verificación de host.

Qué más cambia

Nada. Es una cadena impresa al final de una instalación exitosa; la lógica del instalador no se toca.

Verificación

  • bash -n deploy/install.sh y bash -n deploy/tests/test_shell_scripts.sh
  • bash deploy/tests/run.sh → 67 ok, 0 fallas (eran 65)
  • detect-secrets limpio
  • CI completo en verde sobre el PR #160, con la suite de Django entera

Instalación

Primero el plan, sin tocar nada:

curl -fsSL https://raw.githubusercontent.com/cmp-camaguey/webcmp/v0.3.1/deploy/install.sh \
    | sudo bash -s -- --dry-run

Después la corrida real, en una terminal interactiva del servidor (el instalador aborta sin TTY: un instalador que adivina en un pipe escribe el .env equivocado y nadie lo ve hasta que el sitio responde DisallowedHost):

curl -fsSL https://raw.githubusercontent.com/cmp-camaguey/webcmp/v0.3.1/deploy/install.sh \
    | sudo bash -s

Al final imprimé los cuatro secrets que hay que cargar en Settings → Environments → production. El de DEPLOY_SSH_KNOWN_HOSTS ya sale con el comando corregido.

Gate de aprobación

El environment production tiene ahora required_reviewers (@orl92, @yoelvismr) con prevent_self_review: true: el deploy automático espera la aprobación de una persona distinta de quien lo disparó. Los secrets existentes no se tocaron.