granja: fix host-key en workers efímeros — known_hosts a /dev/null
Los workers efímeros reciclan IPs de Hetzner. accept-new RECHAZA una clave de host cambiada ⇒ el 'until ssh true' de farm-up colgaba para siempre en una IP reusada. Como el modelo es hub-and-spoke (worker sin secretos, compute descartable) no hay superficie MITM: saltamos verificación de host y no ensuciamos known_hosts. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Semántico sayk'uy
Mana ima sutichaypas t'ikrakurqanchu: qillqalla, yachachiylla utaq willaylla t'ikrakurqan.
3 qillqakuna · +11 −3
- scripts/farm/farm-down.sh +3 −1
- scripts/farm/farm-run.sh +3 −1
- scripts/farm/farm-up.sh +5 −1
diff --git a/scripts/farm/farm-down.sh b/scripts/farm/farm-down.sh
index 6ba0d013..127ae9c8 100755
--- a/scripts/farm/farm-down.sh
+++ b/scripts/farm/farm-down.sh
@@ -16,7 +16,9 @@ SSH_KEY="${SSH_KEY:-$HOME/.ssh/github5}"
REMOTE="${REMOTE:-/opt/hammer}"
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
FLEET="$ROOT/scripts/farm/.fleet"
-SSH="ssh -i $SSH_KEY -o StrictHostKeyChecking=accept-new -o ConnectTimeout=10"
+# Ver nota en farm-up.sh: workers efímeros reciclan IPs ⇒ known_hosts a /dev/null (hub-and-spoke,
+# worker sin secretos, sin superficie MITM que proteger).
+SSH="ssh -i $SSH_KEY -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR -o ConnectTimeout=10"
cd "$ROOT"
[ -s "$FLEET" ] || { echo "flota vacía (scripts/farm/.fleet)"; exit 0; }
diff --git a/scripts/farm/farm-run.sh b/scripts/farm/farm-run.sh
index ca9d1dfb..0f7f0a65 100755
--- a/scripts/farm/farm-run.sh
+++ b/scripts/farm/farm-run.sh
@@ -26,7 +26,9 @@ MAXWAIT="${MAXWAIT:-21600}"
SSH_KEY="${SSH_KEY:-$HOME/.ssh/github5}"
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
FLEET="$ROOT/scripts/farm/.fleet"
-SSH="ssh -i $SSH_KEY -o StrictHostKeyChecking=accept-new -o ConnectTimeout=10"
+# Ver nota en farm-up.sh: workers efímeros reciclan IPs ⇒ known_hosts a /dev/null (hub-and-spoke,
+# worker sin secretos, sin superficie MITM que proteger).
+SSH="ssh -i $SSH_KEY -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR -o ConnectTimeout=10"
cd "$ROOT"
cycles() { $SSH "root@$1" 'journalctl -u hammer-farm -o cat --no-pager 2>/dev/null | grep -c "ciclo terminado"' 2>/dev/null || echo 0; }
diff --git a/scripts/farm/farm-up.sh b/scripts/farm/farm-up.sh
index 5d3f3244..7f938f0b 100755
--- a/scripts/farm/farm-up.sh
+++ b/scripts/farm/farm-up.sh
@@ -26,7 +26,11 @@ SSH_KEY="${SSH_KEY:-$HOME/.ssh/github5}"
REMOTE="${REMOTE:-/opt/hammer}"
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
FLEET="$ROOT/scripts/farm/.fleet"
-SSH="ssh -i $SSH_KEY -o StrictHostKeyChecking=accept-new -o ConnectTimeout=10"
+# Workers efímeros RECICLAN IPs de Hetzner ⇒ un known_hosts persistente choca ("HOST KEY CHANGED")
+# y accept-new RECHAZA la clave cambiada, colgando el `until ssh true` para siempre. Como el modelo
+# es hub-and-spoke (el worker NO tiene secretos: compute puro descartable), saltamos la verificación
+# de host y no ensuciamos known_hosts (/dev/null). No hay superficie MITM que proteger acá.
+SSH="ssh -i $SSH_KEY -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR -o ConnectTimeout=10"
cd "$ROOT"
touch "$FLEET"