Сделать тайм-аут SSH быстрее при попытке доступа к недоступному серверу

Я написал сценарий, который закрыл все серверы в нашей среде. Но если какой-то сервер недоступен для начала или если он уже отключен, мой скрипт просто зависает, и ничего не происходит. Как я могу заставить его двигаться вперед, если какой-то сервер недоступен?

#!/bin/bash #script for Shutting down all VM & BM. Region=$1 user=$2 region_file_path="/region/$Region.txt" host=`cat $region_file_path` key_path="/root/.ssh/id_rsa_adminpod" for i in $host do # echo "Shutting down Host in $Region with ip addrss $i" ssh -i $key_path -p 2222 $user@$i "sudo init 0" &> /dev/null if [ $? -ne 0 ]; then echo "$i is shutdown!" else echo "There is some issue, try again" exit 1 fi done 

3 Solutions collect form web for “Сделать тайм-аут SSH быстрее при попытке доступа к недоступному серверу”

Самое простое решение – установить время ожидания соединения на некоторое разумное время.

 ssh -o ConnectTimeout=10 -i $key_path -p 2222 $user@$i "sudo init 0" &> /dev/null 

10 секунд должно быть достаточно.

Вы также можете использовать некоторые другие инструменты для автоматизации задач – то есть Ansible.

Решение, использующее Ansible, следующее.

0) Убедитесь, что вы включили SSH-доступ без доступа между узлом управления и узлами, которые должны быть отключены.

1) подготовить простой файл инвентаря с вашими узлами, которые должны быть отключены. Существует пример содержимого:

 [local] localhost ansible_connection=local [nodes] 192.168.1.30 192.168.1.40 

2) Запустите исполняемый модуль оболочки с файлом инвентаризации, указанным в команде параметра и выключения:

 ansible -i /tmp/hosts -m shell -a "/usr/sbin/shutdown +1" nodes 

У выключения предусмотрена 1 минута задержки, поэтому соединение не будет немедленно отключено. Но, возможно, это не нужно.

Это просто пример, вы можете использовать любую другую команду, которую вы хотите запускать параллельно на нескольких узлах.

Если у вас есть «не отвечающая» зависимость, вы можете просто перейти без exit 1 , а еще несколько раз повторить попытку подключения ssh :

 for i in $host do counter=0 while [ $counter -ne 3 ]; do # echo "Shutting down Host in $Region with ip addrss $i" ssh -o ConnectTimeout=10 -i $key_path -p 2222 $user@$i "sudo init 0" &> /dev/null if [ $? -ne 0 ]; then echo "$i is shutdown!" counter=3 else echo "There is some issue, try again" counter=$(($counter+1)) fi done done 
  • Как запустить скрипты MYSQL из сценария оболочки с переменными bash?
  • cp не правильно оценивает имя dirname в операции поиска
  • Как инвертировать счет, возвращенный из grep?
  • Как я могу установить переменную среды постоянно через сценарий оболочки?
  • Запустить команду bash после некоторых одновременных команд?
  • Возврат только содержимого до и после номера строки с разными совпадающими словами
  • получить mysql число id в сценарии оболочки
  • Сортировка файлов css по свойству цвета
  • Подводя массив внутри awk?
  • Выполнять скрипты bash при вводе каталога
  • bash, не используя ssh -i. Не удается найти каталог
  • Interesting Posts

    Как изменить действие прокрутки в GNOME 3.10

    Вирус VBS Jenxcus влияет на операционную систему Linux?

    Можно ли ограничить количество процессорных мощностей, которые может потребоваться процессу?

    Выполнять несколько команд ssh с другим переключателем

    Вывести результат печати непосредственно в bash без использования if

    логический том, логический диск, том, раздел, физический диск и файловая система

    ssh cant копировать ключ с hamachi

    Закрытие дескриптора файла,> & – vs <& –

    Как я могу настроить ядро ​​на общий своп?

    Python 3.4.3 не удалось создать модули _ssl и _hashlib в Debian Strech

    Проверьте, прошел ли вход в систему через SSH через Active Direcory

    команда awk с несколькими командами

    выражение поиска grep и файл переименования

    Могу ли я использовать один ключ как модификатор и отправить нормальное нажатие клавиши?

    Как переименовать несколько файлов, заменив строку в имени файла?

    Linux и Unix - лучшая ОС в мире.