Как проверить статус входа в S SH маршрутизаторов в скрипте bash с запросами пароля - PullRequest
0 голосов
/ 06 марта 2020

Я выполняю задачу, в которой мне нужно проверить состояние входа S SH на 400 удаленных маршрутизаторах. Я сделал сценарии с использованием ожидаемого в bash S SH удаленного маршрутизатора и запускаю над ним несколько команд. Однако есть некоторые маршрутизаторы, которые не отвечают на S SH. Я использую оператор if, чтобы избежать тех маршрутизаторов, которые отказывают на S SH. Пример кода для проверки состояния на удаленном маршрутизаторе работает только в том случае, если у нас введен пароль без пароля или сохранен закрытый ключ. Не могли бы вы помочь, как я могу проверить состояние S SH на удаленных маршрутизаторах?

Если я получу запрос пароля при выполнении S SH к маршрутизатору, я могу сказать, что сервер может S SH маршрутизатор. Нет необходимости указывать пароль.

#!/bin/bash

ssh -q -o BatchMode=yes -o ConnectTimeout=7 username@IP exit
echo $?
if [ $? -ne 0 ]
then
  # Do stuff here if example.com SSH is down
  echo "Can not connect to the device"
fi

1 Ответ

1 голос
/ 06 марта 2020

Что ж, если вы используете пакет 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

Пожалуйста, примите этот ответ, если он работает для вас. надеюсь, это поможет

...