Вы можете использовать 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