Как я могу проверить, что удаленный компьютер подключен к сети через SSH / скрипт?

12

Я пишу скрипт для резервного копирования данных с моего ноутбука на сервер Ubuntu. Для этого я ищу команду (ba) sh, чтобы проверить, доступен ли сервер перед началом резервного копирования. что-то вроде pingпорта 22, который возвращает логическое значение.

Как я могу это сделать?

Amo__
источник

Ответы:

21

Как это:

nc -z hostname 22 > /dev/null
echo $?

Если это так, 0то это доступно. Если это так, 1то это не так.

bahamat
источник
Обратите внимание, что эта опция работает только с пакетом netcat-openbsd, в противном случае эта опция отсутствует:nc: invalid option -- 'z'
valentin_nasta
без -wопции nc навсегда застрянет на Ubuntu
Эдвард Торвальдс
мы можем иметь подобную команду из окон
Харшал Зопе
13

Используйте netcat :

nc -z localhost 22

Из справочной страницы

 -z      Specifies that nc should just scan for listening daemons,
         without sending any data to them.
Крис
источник
Черт! Ты подтолкнул меня на это.
Багамат
2
спасибо, не знал nc, мне было интересно, почему nc -z -w 2 192.168.0.123(-w это опция тайм-аута в секундах) не тайм-аут: |
Amo__
Вы должны указать порт тоже. nc -z -w 2 192.168.0.123 22 работает как положено.
Крис
+1 за zв. кто бы вы ни сканировали, он может получить информацию только о том, кто сканировал, не предоставивidentification string
amrx
5

Alternate:

nc -vzw 1 hostname 22
Мистер пундир
источник
это должен быть выбранный ответ, без -wопции ncнавсегда застрянет на Ubuntu
Эдвард Торвальдс
Bool может быть использован как =>nc -zw 2 examplehost.com 22 && { echo "You can call your backup function" ; } || { echo "SSH Unavailable" ; }
Мистер Пундир
3

Как насчет

MACHINE=192.168.0.8
exec 3>/dev/tcp/${MACHINE}/22
if [ $? -eq 0 ]
then
    echo "SSH up"
else
    echo "SSH down"
fi

источник
Не всегда предполагайте, что это Linux. Его ноутбук может быть Mac. И Debian отключает /dev/tcp. Ubuntu, являющаяся производной от Debian, может также (но у меня нет конкретных знаний). Но если /dev/tcpесть, то да, это совершенно верно.
Багамат
спасибо за ваш отзыв, я написал это на Mac.
спасибо, даже если exec 3>/dev/tcp/${HOST}/22выглядит действительно "странно"
Amo__
Это единственный ответ, который не требует установки дополнительных пакетов.
Чен А.