Вот мой хак:
#ipaddress shell variable can be provided as an argument to the script.
while true
do
nmap_output=$(nmap -p22 ${ipaddress})
$(echo ${nmap_output} | grep -q open)
grep_output=$?
if [ "$grep_output" == 0 ] ; then
#Device is LIVE and has SSH port open for clients to connect
break
else
#[01 : bold
#31m : red color
#0m : undo text formatting
echo -en "Device is \e[01;31mdead\e[0m right now .... !\r"
fi
done
#\033[K : clear the text for the new line
#32 : green color
echo -e "\033[KDevice is \e[01;32mlive\e[0m !"
ssh [email protected]${ipaddress}
Не полагаться только ping
. Зачем ?
- Успешно ping
не гарантирует вам успешный доступ ssh
. Вы также можете добавить тест ping
, к началу этого скрипта и выйти, если ping завершился неудачей, и ничего не делать из вышеизложенного.
Выше bash
фрагмент сценария, проверяет, работает ли устройство, которое вы пытаетесь использовать . Доступ к порту SSH открыт для клиентов (вас) для подключения. Требуется установка nmap
.
Я не понимаю, почему вы хотите использовать ssh
на нескольких компьютерах в этом скрипте. Но, мои работы для ssh в одном устройстве и могут быть изменены в соответствии с вашими потребностями.
Этот ответ неверен, если вы не настроили маршрут по умолчанию для IP-адреса назначения, который вы пингоруете, вы все равно получите 0 возвращаемое значение. –
@SpaceRocker: Очень интересно! Я только что проверил 'man ping', и я склонен считать это поведение ошибкой в' ping', так как я ожидаю, что в этом случае будет возвращено значение 2. Цитата: _ «Если ping не получает никаких пакетов ответа вообще, он выйдет с кодом 1. Если оба значения пакета и крайний срок указаны, и к тому времени, когда истечет крайний срок, будут получены меньше, чем количество пакетов, оно также выйдет с кодом 1. При другой ошибке он выходит с кодом 2. В противном случае он выходит с кодом 0. Это позволяет использовать код выхода, чтобы узнать, жив ли хост или нет. »_ Что вы берете на себя? – Stephan202