Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

$ ssh -q [email protected] exit
$ echo $?
255

$ ssh -q [email protected] 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'

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

Ответ 2

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

Ответ 3

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

$(ssh -o BatchMode=yes -o ConnectTimeout=5 [email protected] echo ok 2>&1)

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

Ответ 4

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

status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 [email protected] 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

Ответ 5

Try:

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

Ответ 6

На всякий случай кто-то хочет проверить, открыт ли порт 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"

Ответ 7

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

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

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

Ответ 8

Для подключения к серверу с несколькими интерфейсами

ssh -o ConnectTimeout=1 -q [email protected];[ $? = 1 ] || ssh -o ConnectTimeout=1 -q [email protected]

Ответ 9

Пример использования скрипта BASH 4+:

# -- ip/host and res which is result of nmap (note must have nmap installed)
ip="192.168.0.1"
res=$(nmap ${ip} -PN -p ssh | grep open)

# -- if result contains open, we can reach ssh else assume failure) --
if [[ "${res}" =~ "open" ]] ;then
    echo "It Open! Let SSH to it.."
else
    echo "The host ${ip} is not accessible!"
fi

Ответ 10

https://onpyth.blogspot.com/2019/08/check-ping-connectivity-to-multiple-host.html

Выше ссылка заключается в создании скрипта Python для проверки подключения. Вы можете использовать аналогичный метод и использовать:

ping -w 1 -c 1 "IP Address" 

Команда для создания скрипта bash.

Ответ 11

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

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