Сделать тайм-аут 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 
  • Замена переменной, содержащей \ with sed
  • Bash Script: нет такого файла или каталога при определении переменной через источник vars.txt
  • mv: не обнаружено, когда выполняется из сценария, который изменяет переменную PATH
  • как извлечь некоторые строки в файл данных по сравнению с другим файлом данных? (слияние)
  • Объединение записей из двух отсортированных файлов
  • Передача подстановочного символа * в скрипт (bash?)
  • У меня возникли проблемы с просмотром, если мои имена хостов из моего файла являются либо записью A, либо псевдонимом
  • Запустить скрипт при загрузке?
  • «Неожиданный конец файла» в сценарии bash
  • bash ест мою строку
  • получить день с даты с добавлением 0 в 1 до 9 цифр
  • Interesting Posts

    При загрузке виртуальной мыши игнорируется xorg

    Как вы получаете первый файл в каждом подкаталоге, соответствующем списку расширений файлов?

    Слишком много установки и удаления?

    Как получить результаты из «\ 033 [6n» в сценарии sh

    Что значения, принимаемые «OnFailureJobMode =», означают в файлах systemd unit

    systemd: запуск сервисов по запросу, таких как postgresql и mysql, которые еще не поддерживают активацию на основе сокетов

    Сравнение необработанных блочных устройств

    Переименовать файлы для изменения знаков пунктуации и нумерации

    могут ли группы захвата регулярных выражений использоваться в команде поиска GNU?

    Изменение типов столбцов столбцов в базе данных Hive

    Может изменять разрешение монитора графики SyncMaster SA850 и Intel HD

    Перенаправление программного вывода

    Сделать файл python доступным из любого места всеми пользователями

    Как повернуть микрофонный разъем в гнездо для наушников?

    Как добавить Xft suppport в dwm?

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