A configuração do OpenSSH atribui a porta programaticamente?

A configuração do OpenSSH atribui a porta programaticamente?

Eu tenho um monte de computadores menos que novos que estou conectando a um pequeno cluster de computação, por que não? Eu tenho um único nó mestre que possui um endereço IP público com o qual todos esses computadores podem se comunicar. Os nós de trabalho estão atrás de um NAT. Então, para conversar com todos eles, peço a todos que criem um túnel SSH reverso no nó mestre na inicialização. Assim, cada um deles está conectado ao mestre em uma porta diferente. Cada máquina escolhe uma porta n+1onde né o número da porta da máquina anterior. Na minha configuração ssh no meu laptop, tenho o seguinte:

Host worker*
    ProxyCommand ssh master -W %h:%p
    HostName localhost

Host worker001
    Port 7001
Host worker002
    Port 7002
....
#Host workerX
#    Port 7000 + X

O que eu gostaria de fazer é ter uma única entrada para meus trabalhadores, para que o trabalhadorX use a porta 7000 + X. Isso é possível com a configuração ssh? Caso contrário, existe alguma outra solução alternativa para que isso aconteça? Alternativamente, posso "dividir" minha configuração ssh, para que meu ~/.ssh/configarquivo não tenha cem linhas de workerXe eu possa confinar toda essa bagunça?

Responder1

Você está usando ProxyCommand, então basta escrever um comando personalizado que faça isso:

ProxyCommand ~/bin/worker-ssh %h

Onde o script em si pode ser:

#!/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

(Não use HostNamecom isso; o comando proxy obviamente precisará saber o nome do host original.)

informação relacionada