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?

Amo__
la source

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.

bahamat
la source
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.
chris
la source
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
M. Pundir
la source
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

la source
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.