¿La configuración de OpenSSH asigna el puerto mediante programación?

¿La configuración de OpenSSH asigna el puerto mediante programación?

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+1donde nestá 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/configarchivo no tenga cien líneas workerXy 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 HostNamecon esto; el comando proxy obviamente necesitará conocer el nombre del host original).

información relacionada