Wie kann ich überprüfen, ob ein Remotecomputer für den SSH- / Skriptzugriff online ist?


11

Ich schreibe ein Skript, das Daten von meinem Laptop auf einem Ubuntu-Server sichert. Dazu suche ich nach einem (ba) sh-Befehl, um zu testen, ob der Server verfügbar ist, bevor die Sicherung gestartet wird. so etwas wie pingan Port 22, der einen Booleschen Wert zurückgibt.

Wie kann ich das machen?

Antworten:


19

So was:

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

Wenn es 0dann ist, ist es verfügbar. Wenn es 1dann ist, ist es nicht.


Beachten Sie, dass diese Option nur mit dem Paket netcat-openbsd funktioniert, andernfalls ist die Option nicht vorhanden:nc: invalid option -- 'z'
valentin_nasta

ohne -wOption nc wird für immer auf Ubuntu stecken bleiben
Edward Torvalds

12

Verwenden Sie netcat :

nc -z localhost 22

Aus der Manpage

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

Verdammt! Du warst schneller als ich.
Bahamat

2
danke, wusste nicht nc, ich habe mich gefragt, warum nc -z -w 2 192.168.0.123(-w ist die Timeout-Option in Sekunden) kein Timeout: |
Amo__

Sie müssen auch einen Port angeben. nc -z -w 2 192.168.0.123 22 funktioniert wie erwartet.
Chris

+1 für die zin. Wer auch immer Sie noch scannen, kann Informationen darüber erhalten, wer den Scan nur durchgeführt hat, ohne dieidentification string
amrx

5

Wechseln:

nc -vzw 1 hostname 22

Dies sollte Antwort ausgewählt werden, ohne -wOption ncwird für immer auf Ubuntu
Edward Torvalds

Bool kann verwendet werden wie =>nc -zw 2 examplehost.com 22 && { echo "You can call your backup function" ; } || { echo "SSH Unavailable" ; }
Mr. Pundir

2

Wie wäre es mit

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

Gehen Sie nicht immer davon aus, dass es Linux ist. Sein Laptop könnte ein Mac sein. Und Debian deaktiviert /dev/tcp. Ubuntu, das von Debian abgeleitet ist, kann ebenfalls (aber ich habe keine spezifischen Kenntnisse). Aber wenn /dev/tcpverfügbar, dann ist dies ja vollkommen gültig.
Bahamat

Vielen Dank für Ihr Feedback, ich habe es auf einem Mac geschrieben.

danke, auch wenn es exec 3>/dev/tcp/${HOST}/22wirklich "bizarr" aussieht
Amo__

Dies ist die einzige Antwort, für die keine zusätzlichen Pakete installiert werden müssen.
Chen A.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.