¿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?

Amo__
fuente

Respuestas:

21

Me gusta esto:

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

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

bahamat
fuente
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.
Chris
fuente
¡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
Señor Pundir
fuente
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

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