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


12

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

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

Ответы:


21

Как это:

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

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


Обратите внимание, что эта опция работает только с пакетом 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


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__

Это единственный ответ, который не требует установки дополнительных пакетов.
Чен А.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.