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