Что ж, если вы используете пакет expect
, то там также есть опция тайм-аута.
В противном случае ваш код оболочки выше - верный способ сделать это, за исключением нескольких исправлений:
#!/bin/bash
ssh -q -o BatchMode=yes -o ConnectTimeout=7 username@IP date
ret=$?
echo $ret
if [ $ret -ne 0 ]
then
# Do stuff here if example.com SSH is down
echo "Can not connect to the device"
fi
Как видите, мы сразу присваиваем $?
переменной. Если вы этого не сделаете, то $?
будет содержать возвращаемое значение команды echo $?
, которое всегда будет 0. Следовательно, вы получите true для всех s sh. Также я предлагаю запустить какую-то другую команду вместо exit
с s sh.
Надеюсь, это поможет
=== Отредактировано ==== >>>
хорошо, так как у вас не включен пароль s sh. Вы можете попробовать telnet
к порту 22, если порт 22 открыт, то он покажет подключенный, а если он не открыт, то вы не сможете использовать его. Вот модифицированный код: (При условии, что s sh работает на 22 порту, в противном случае измените порт в коде.)
#!/bin/bash
echo "" | telnet $IP 22 | grep "Connected"
ret=$?
echo $ret
if [ $ret -ne 0 ]
then
# Do stuff here if example.com SSH is down
echo "Can not connect to the device"
fi
Пожалуйста, примите этот ответ, если он работает для вас. надеюсь, это поможет