Вы можете использовать Nmap для этого. Следующая команда попытается установить TCP-соединение с 22 портом (SSH) и вернет следующее в случае успеха:
$ 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
Когда хост не отвечает, вы получаете следующее:
$ 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
Вы также можете добавить следующие параметры, чтобы избежать слишком долгого ожидания, пока хост не отвечает:
$ nmap -sT -p 22 <host> --max-retries 1 --host-timeout 1
Если вы поместите эту команду в скрипт с циклом while и таймером сна, вы можете получить ожидаемый результат. Что-то вроде этого:
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