granja: el -i ~/.ssh/github5 de todos los scripts es un no-op — entra el fallback a id_ed25519

This commit is contained in:
Sergio
2026-09-18 20:20:37 +00:00
parent 317ce48c16
commit fd065720f5
+22 -2
View File
@@ -57,10 +57,30 @@ nombre. El modelo efímero de pago sigue documentado y funcionando, pero está S
trabajo desde el 2026-09-05. Un `farm-up` por reflejo cuesta dinero real y no hace falta.
```sh
ssh -i ~/.ssh/github5 root@dev.gioser.net # github5 está en su authorized_keys
ssh -i ~/.ssh/sergio root@dev.gioser.net # la otra que entra; NO hay entrada en ssh/config
ssh -i ~/.ssh/id_ed25519 root@dev.gioser.net # la que entra HOY; NO hay entrada en ssh/config
```
⚠ **Los scripts piden `~/.ssh/github5`, ese fichero NO EXISTE en el hub, y aun así todo funciona —
por accidente** (medido 2026-09-18). Una docena larga de scripts trae
`SSH_KEY="${SSH_KEY:-$HOME/.ssh/github5}"`: `estado-granja.sh`, `cosecha-cron.sh`, `harvest-go.sh`,
`farm-up.sh`, `farm-down.sh`, `harkaq-vol.sh`… El único fichero en `~/.ssh` es `id_ed25519`, y sin
embargo `estado-granja.sh` con su default entra y reporta. **`ssh -i <fichero inexistente>` no
falla**: avisa por stderr y cae a las identidades por defecto, que es donde está la buena:
```
Warning: Identity file /home/sergio/.ssh/github5 not accessible: No such file or directory.
debug1: identity file /home/sergio/.ssh/id_ed25519 type 2
debug1: Offering public key: /home/sergio/.ssh/id_ed25519 ED25519 SHA256:kAqayFW4hSqq…
debug1: Server accepts key: … · Authenticated to dev.gioser.net using "publickey".
```
O sea que **el `-i` de todos esos scripts es hoy un no-op** y quien manda es el fallback. Se cae el
día que alguien ponga un `~/.ssh/github5` que no entre (el `-i` explícito GANA sobre el default), o
que aparezca un `IdentityFile`/`IdentitiesOnly` en `ssh/config`. Y el error dirá `Permission
denied`, sin mencionar `SSH_KEY` ni `github5`. Mismo patrón que el reaper salvándose por la
subcadena `gioser`: *una protección que funciona por accidente se ve igual que una que funciona por
diseño*. Barrer el default de los scripts es su propia unidad de trabajo — no tocarlos de paso.
**Se enchufa por `scripts/farm/.fleet`** (`<nombre> <ip>` por línea), que **está en `.gitignore`**:
o sea que un hub recién clonado nace con la flota VACÍA y la granja queda desconectada **sin que
nada falle** — la cosecha dice «flota vacía» cada 30 min y los artefactos del worker no vuelven.