Для работы скрипта потребуется утилита для неинтерактивной аутентификации пароля sshpass. Установить утилиту в Linux Ubuntu можно с помощью команды sudo apt install sshpass.
С необходимостью централизованной перезагрузки удалённых хостов на ОС Linux я столкнулся во время подмены видеофайла на уютном и, к сожалению, не вещательном http-медиасервере. VLC по какой-то причине не стал подхватывать вновь заменённый файл «на лету» и надо было или перезапустить плеер или выполнить sudo reboot. Мне милее последний вариант.
Итак, чтобы не подключаться ко всем хостам по очереди, был написан данный скрипт:
# Массив с IP адресами #
hosts=("192.168.1.2" "192.168.1.3" "192.168.1.4")
for host in "${hosts[@]}"
do
RESULT="64"
PING=$(ping $host -c 1 | grep 64 | awk '{print $1}')
if [ "$RESULT" != "$PING" ]
then
echo "$host недоступен!"
else
echo "$host доступен!"
# Требуется утилита sshpass #
sshpass -p 'password' ssh username@$host 'sudo reboot'
echo "Перезапускаем $host..."
fi
done
Нужно только вписать в массив хостов свои IP адреса и заменить в обращении к sshpass пароль и имя пользователя на корректные.