Как создать скрипт bash для проверки SSH соединения?



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

моя проблема заключается в том, что удаленные машины не очень надежные, и они не всегда. Мне нужен скрипт bash, который проверит, работает ли SSH-соединение. Перед фактическим созданием ключей для будущего использования.

176   8  

8 ответов:

вы можете проверить это с помощью возвращаемого значения ssh дает вам:

$ ssh -q user@downhost exit
$ echo $?
255

$ ssh -q user@uphost exit
$ echo $?
0

EDIT: другой подход будет использовать nmap (вам не нужно будет иметь ключи или логин-вещи):

$ a=`nmap uphost -PN -p ssh | grep open`
$ b=`nmap downhost -PN -p ssh | grep open`

$ echo $a
22/tcp open ssh
$ echo $b
(empty string)

но вам придется grep сообщение (nmap не использует возвращаемое значение, чтобы показать, если порт был отфильтрован, закрыт или открыт).

EDIT2:

если вас интересует фактическое состояние ssh-порта, вы можете заменить grep open С egrep 'open|closed|filtered':

$ nmap host -PN -p ssh | egrep 'open|closed|filtered'

просто чтобы быть полным.

ssh -q -o "BatchMode=yes" -i /home/sicmapp/.ssh/id_rsa <ID>@<Servername>.<domain> "echo 2>&1" && echo $host SSH_OK || echo $host SSH_NOK

вы можете использовать что-то вроде этого

$(ssh -o BatchMode=yes -o ConnectTimeout=5 user@host echo ok 2>&1)

это выведет "ok", если ssh-соединение в порядке

дополняя ответ @Adrià Cidre вы можете сделать:

status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 user@host echo ok 2>&1)

if [[ $status == ok ]] ; then
  echo auth ok, do something
elif [[ $status == "Permission denied"* ]] ; then
  echo no_auth
else
  echo other_error
fi

попробуй:

echo quit | telnet IP 22 2>/dev/null | grep Connected

на всякий случай, если кто-то только хочет проверить, открыт ли порт 22 на удаленной машине, эта простая команда netcat полезна. Я использовал его, потому что nmap и telnet были недоступны для меня. Кроме того, моя конфигурация ssh использует аутентификацию пароля клавиатуры.

Это вариант решения, предложенный GUESSWHOz.

nc -q 0 -w 1 "${remote_ip}" 22 < /dev/null &> /dev/null && echo "Port is reachable" || echo "Port is unreachable"

Если вы хотите проверить, существует ли удаленная папка или любой другой файл-проверьте действительно:

if [ -n "$(ssh "${user}@${server}" [ -d "$folder" ] && echo 1; exit)" ]; then
    # exists
else
    # doesn't exist
fi

Не забывайте кавычки в "$(ssh ...)".

Я чувствую, что вы пытаетесь решить неправильную проблему здесь. Разве вы не должны пытаться сделать SSH-демоны более стабильный? Попробуйте запустить что-то вроде монит, который проверит, работает ли демон и перезапустит его, если это не так (давая вам время найти корневую проблему за закрытием sshd на вас). Или сетевая служба хлопотно? Попробуйте посмотреть на man ifup. Неужели вся эта чертова штука просто хочет закрыться от тебя? Ну, это большая проблема ... пытаться глядя на ваши журналы (начните с системного журнала), чтобы найти аппаратные сбои или службы, которые закрывают ваш boxen (возможно, монитор температуры?).

сделать ваши сценарии отказоустойчивыми-это здорово, но вы также можете сделать свой boxen отказоустойчивым.

    Ничего не найдено.

Добавить ответ:
Отменить.