Comment puis-je vérifier qu'un ordinateur distant est en ligne pour accéder à ssh / script?


12

J'écris un script qui sauvegardera les données de mon ordinateur portable sur un serveur Ubuntu. Pour ce faire, je recherche une commande (ba) sh pour tester si le serveur est disponible avant de démarrer la sauvegarde. quelque chose comme pingsur le port 22 qui renvoie un booléen.

Comment puis-je faire ceci?

Réponses:


21

Comme ça:

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

Si c'est le cas, 0il est disponible. Si c'est le cas, 1ce n'est pas le cas.


Notez que cette option ne fonctionne qu'avec le package netcat-openbsd, sinon l'option n'est pas présente:nc: invalid option -- 'z'
valentin_nasta

sans -woption nc sera bloqué pour toujours sur Ubuntu
Edward Torvalds

pouvons-nous avoir une commande similaire à partir de Windows
Harshal Zope

13

Utilisez netcat :

nc -z localhost 22

Depuis la page de manuel

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

Zut! Tu m'as battu.
bahamat

2
merci, ne savait pas nc, je me demandais pourquoi nc -z -w 2 192.168.0.123(-w est l'option de timeout, en secondes) ne temporise pas: |
Amo__

Vous devez également spécifier un port. nc -z -w 2 192.168.0.123 22 fonctionne comme prévu.
chris

+1 pour l' zentrée. qui que vous numérisez peut toujours obtenir des informations sur qui a effectué la numérisation uniquement sans fournir leidentification string
amrx

5

Alterner:

nc -vzw 1 hostname 22

cette réponse devrait être sélectionnée, sans -woption ncsera bloquée pour toujours sur Ubuntu
Edward Torvalds

Bool peut être utilisé comme =>nc -zw 2 examplehost.com 22 && { echo "You can call your backup function" ; } || { echo "SSH Unavailable" ; }
M. Pundir

3

Qu'en est-il de

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

Ne présumez pas toujours que c'est Linux. Son ordinateur portable peut être un Mac. Et Debian se désactive /dev/tcp. Ubuntu étant dérivé de Debian peut aussi bien (mais je n'ai aucune connaissance spécifique). Mais s'il /dev/tcpest disponible, alors oui, c'est parfaitement valable.
bahamat

merci pour vos commentaires, je l'ai écrit sur un Mac.

merci, même si exec 3>/dev/tcp/${HOST}/22ça a l'air vraiment "bizarre"
Amo__

C'est la seule réponse qui ne nécessite pas d'installer de packages supplémentaires.
Chen A.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.