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?

Amo__
quelle

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.

Bahamat
quelle
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.
chris
quelle
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
Herr Pundir
quelle
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

quelle
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.