¿Cómo puedo verificar que una computadora remota esté en línea para acceso ssh / script?


12

Estoy escribiendo un script que hará una copia de seguridad de los datos de mi computadora portátil en un servidor Ubuntu. Para hacerlo, estoy buscando un comando (ba) sh para probar si el servidor está disponible antes de comenzar la copia de seguridad. algo así como pingen el puerto 22 que devuelve un valor booleano.

¿Cómo puedo hacer esto?

Respuestas:


21

Me gusta esto:

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

Si es 0así, está disponible. Si es 1así, no lo es.


Tenga en cuenta que esta opción solo funciona con el paquete netcat-openbsd, de lo contrario la opción no está presente:nc: invalid option -- 'z'
valentin_nasta

sin -wopción nc será atrapado para siempre en Ubuntu
Edward Torvalds

podemos tener un comando similar desde windows
Harshal Zope

13

Use netcat :

nc -z localhost 22

De la página de manual

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

¡Maldición! Me ganaste a eso.
bahamat

2
gracias, no sabía nc, me preguntaba por qué nc -z -w 2 192.168.0.123(-w es la opción de tiempo de espera, en segundos) no tiene tiempo de espera: |
Amo__

También debe especificar un puerto. nc -z -w 2 192.168.0.123 22 funciona como se esperaba.
Chris

+1 para la zentrada. quien sea que escanee todavía puede obtener información de quién hizo el escaneo solo sin proporcionar elidentification string
amrx

5

Alterno:

nc -vzw 1 hostname 22

esta debería ser la respuesta seleccionada, sin -wopción ncse quedará atascado para siempre en Ubuntu
Edward Torvalds

Bool se puede usar como =>nc -zw 2 examplehost.com 22 && { echo "You can call your backup function" ; } || { echo "SSH Unavailable" ; }
Sr. Pundir

3

Qué pasa

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

No siempre asuma que es Linux. Su computadora portátil puede ser una Mac. Y Debian deshabilita /dev/tcp. Ubuntu también puede derivarse de Debian (pero no tengo ningún conocimiento específico). Pero si /dev/tcpestá disponible, entonces sí, esto es perfectamente válido.
bahamat

Gracias por sus comentarios, lo he escrito en una Mac.

gracias, incluso si se exec 3>/dev/tcp/${HOST}/22ve realmente "extraño"
Amo__ 02 de

Esta es la única respuesta que no requiere instalar paquetes adicionales.
Chen A.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.