Як я можу перевірити наявність віддаленого комп'ютера в Інтернеті для доступу до ssh / script?


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 назавжди
Едвард Торвальдс

чи можемо ми мати аналогічну команду з windows
Harshal Zope

13

Використовуйте netcat :

nc -z localhost 22

Із сторінки сторінки

 -z      Specifies that nc should just scan for listening daemons,
         without sending any data to them.

Чорт! Ти побив мене до цього.
bahamat

2
дякую, не знав nc, мені було цікаво, чому nc -z -w 2 192.168.0.123(-w - опція таймауту, у секундах) не таймаут: |
Amo__

Вам також потрібно вказати порт. nc -z -w 2 192.168.0.123 22 працює, як очікувалося.
chris

+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є, то так, це цілком справедливо.
Багамат

THX для вашого відгуку, я написав це на Mac.

дякую, навіть якщо це exec 3>/dev/tcp/${HOST}/22виглядає справді "химерно"
Amo__

Це єдина відповідь, яка не потребує встановлення додаткових пакетів.
Чень А.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.