Jak mogę sprawdzić, czy zdalny komputer jest online w celu uzyskania dostępu do ssh / script?

12

Piszę skrypt, który utworzy kopię zapasową danych z mojego laptopa na serwerze Ubuntu. Aby to zrobić, szukam polecenia (ba) sh, aby sprawdzić, czy serwer jest dostępny przed rozpoczęciem tworzenia kopii zapasowej. coś jak pingna porcie 22, który zwraca wartość logiczną.

Jak mogę to zrobić?

Amo__
źródło

Odpowiedzi:

21

Lubię to:

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

Jeśli jest, 0to jest dostępny. Jeśli tak, 1to nie jest.

bahamat
źródło
Należy pamiętać, że ta opcja działa tylko z pakietem netcat-openbsd, w przeciwnym razie opcja nie jest dostępna:nc: invalid option -- 'z'
valentin_nasta
bez -wopcji nc utknie na zawsze na Ubuntu
Edward Torvalds
czy możemy mieć podobne polecenie z okien
Harshal Zope
14

Użyj netcat :

nc -z localhost 22

Z strony podręcznika

 -z      Specifies that nc should just scan for listening daemons,
         without sending any data to them.
Chris
źródło
Cholera! Pobiłeś mnie do tego.
bahamat
2
dzięki, nie wiedziałem nc, zastanawiałem się, dlaczego nc -z -w 2 192.168.0.123(-w to opcja limitu czasu, w sekundach) nie limit czasu: |
Amo__
Musisz także podać port. nc -z -w 2 192.168.0.123 22 działa zgodnie z oczekiwaniami.
Chris
+1 za zw. ktokolwiek skanujesz nadal może uzyskać informacje o tym, kto wykonał skanowanie tylko bez podaniaidentification string
amrx
5

Alternatywny:

nc -vzw 1 hostname 22
Pan Pundir
źródło
należy wybrać odpowiedź, bez -wopcji ncutknie na zawsze na Ubuntu
Edward Torvalds
Bool może być użyty jak =>nc -zw 2 examplehost.com 22 && { echo "You can call your backup function" ; } || { echo "SSH Unavailable" ; }
Pan Pundir
3

Co powiesz na

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

źródło
Nie zawsze zakładaj, że to Linux. Jego laptop może być komputerem Mac. A Debian wyłącza się /dev/tcp. Ubuntu wywodzące się z Debiana może również (ale nie mam konkretnej wiedzy). Ale jeśli /dev/tcpjest dostępny, to tak, jest to całkowicie poprawne.
bahamat
dziękuję za twoją opinię, napisałem to na komputerze Mac.
dzięki, nawet jeśli exec 3>/dev/tcp/${HOST}/22wygląda naprawdę „dziwacznie”
Amo__
To jedyna odpowiedź, która nie wymaga instalowania dodatkowych pakietów.
Chen A.