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+1
onde 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/config
arquivo não tenha cem linhas de workerX
e 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 HostName
com isso; o comando proxy obviamente precisará saber o nome do host original.)