Como posso esperar que uma conexão seja estabelecida?

1

Eu preciso esperar até que um host de destino esteja funcionando e aceitando conexões em uma porta específica.

Eu quero usar isso como parte do comando ssh -o ProxyCommand para esperar até que o host de destino seja inicializado e o sshd seja iniciado antes que o nc finalmente se conecte a ele.

Como posso fazer isso no Linux?

    
por Juergen 02.06.2016 / 11:42

2 respostas

2

Você pode usar o nmap para isso. O comando a seguir tentará estabelecer uma conexão TCP com a porta 22 (SSH) e retornar o seguinte quando bem-sucedido:

$ nmap -sT -p 22 <host>
Starting Nmap 6.47 ( http://nmap.org ) at 2016-06-02 12:40 CEST
Nmap scan report for <host> (<ip>)
Host is up (0.00078s latency).
PORT   STATE SERVICE
22/tcp open  ssh

Quando o host não responde, você recebe o seguinte:

$ nmap -sT -p 22 <host>

Starting Nmap 6.47 ( http://nmap.org ) at 2016-06-02 12:40 CEST
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 1.04 seconds

Você também pode adicionar as seguintes opções para evitar esperar demais enquanto o host não está respondendo:

$ nmap -sT -p 22 <host> --max-retries 1 --host-timeout 1

Se você colocar esse comando em um script com um loop while e um timer de espera, poderá obter o resultado esperado. Algo parecido com isto:

while true
do
  nmap -sT -p 22 <host> --max-retries 1 --host-timeout 1 | grep open > /dev/null
  if [ $? -eq 0 ]
  then
    echo "Your host is ready"
    exit 0
  fi
  sleep 1
done
    
por 02.06.2016 / 12:51
0

Tente se conectar em um loop:

COUNT=0; 
until ssh $user@$ip || [ $COUNT -eq 10 ]; do sleep 1; (( COUNT++ )); done

O loop terminará após 10 tentativas, ou uma vez que a conexão ssh foi estabelecida.

    
por 28.10.2018 / 15:00