Tengo un montón de computadoras poco nuevas que he estado conectando a un pequeño clúster de computación porque ¿por qué no? Tengo un único nodo maestro que tiene una dirección IP pública con la que todas estas computadoras pueden comunicarse. Los nodos trabajadores están detrás de una NAT. Entonces, para conversar con todos ellos, les pido que creen un túnel ssh inverso hacia el nodo maestro en el arranque. Por lo tanto, cada uno de ellos está conectado al maestro en un puerto diferente. Cada máquina elige un puerto n+1
donde n
está el número de puerto de la máquina anterior. En mi configuración ssh en mi computadora portátil, tengo lo siguiente:
Host worker*
ProxyCommand ssh master -W %h:%p
HostName localhost
Host worker001
Port 7001
Host worker002
Port 7002
....
#Host workerX
# Port 7000 + X
Lo que me gustaría hacer es tener una entrada única para mis trabajadores, de modo que el trabajadorX use el puerto 7000 + X. ¿Es esto posible con la configuración ssh? Si no es así, ¿existe alguna otra solución para que esto suceda? Alternativamente, ¿puedo "dividir" mi configuración ssh para que mi ~/.ssh/config
archivo no tenga cien líneas workerX
y pueda limitar todo ese desorden?
Respuesta1
Estás usando ProxyCommand, así que simplemente escribe un comando personalizado que haga esto:
ProxyCommand ~/bin/worker-ssh %h
Donde podría verse el script en sí:
#!/usr/bin/env bash
host=$1
if [[ $host =~ ^worker0*([0-9]+)$ ]]; then
port=${BASH_REMATCH[1]}
port=$(( port + 7000 ))
ssh master -W "localhost:$port"
else
echo "error: $0: host '$host' is not a worker" >&2
exit 1
fi
(No lo use HostName
con esto; el comando proxy obviamente necesitará conocer el nombre del host original).