Linux command d'attendre qu'un server SSH soit en place

J'ai un script qui crée une machine virtuelle et me renvoie une adresse IP. Ensuite, j'aimerais faire quelque chose comme ça:

waitforssh 192.168.2.38 && ssh 192.168.2.38 

Et il attendra que la machine soit en place et que ssh réponde, puis ssh.

waitforssh est la command que je dois find.

Est-ce que nmap, netcat, fping ou ping effectuera le travail? J'ai essayé netcat mais il abandonne en quelques secondes si l'hôte est inaccessible.

Il doit gérer le fait que la machine elle-même démarre et peut prendre un certain time pour répondre aux packages réseau.

3 Solutions collect form web for “Linux command d'attendre qu'un server SSH soit en place”

Je n'ai pas d'hôte pour lequel je peux et je contrôle si cela fonctionne ou non, mais cela devrait fonctionner:

 while ! ssh <ip> do echo "Trying again..." done 

Ou un script shell qui est plus explicite:

 #!/bin/sh ssh $1 while test $? -gt 0 do sleep 5 # highly recommended - if it's in your local network, it can try an awful lot pretty quick... echo "Trying again..." ssh $1 done 

Enregistrez-le comme (par exemple) waitforssh.sh et appelez-le avec sh waitforssh.sh 192.168.2.38

La command ssh peut recevoir une command à effectuer sur la machine distante comme dernier paramètre. ssh $MACHINE echo donc ssh $MACHINE echo dans une boucle. En cas de succès, il renvoie 0 en $ ?, lors de l'échec 255. Vous devez bien sûr utiliser l'authentification sans parabole avec des certificates.

Eh bien, je ne suis pas sûr de ce que vous entendez pour être en place , mais qu'en est-il?

 $ ping host.com | grep --line-buffered "bytes from" | head -1 && ssh host.com 

Première command ping | ... | head -1 ping | ... | head -1 ping | ... | head -1 attend que le server ait envoyé une réponse de ping unique et existe. Ensuite, ssh entre en jeu. Soyez conscient que grep peut tamponner la sortie, donc c'est ce que – --line-buffered est pour.

Vous pouvez envelopper cette command avec la fonction bash pour l'utiliser exactement comme vous l'avez décrit.

 $ waitfor() { ping $1 | grep --line-buffered "bytes from" | head -1 } $ waitfor server.com && ssh server.com 
  • Limiter la key SSH pour exécuter uniquement rsync
  • Est-il possible d'exécuter sshd en tant qu'utilisateur normal?
  • login SSH refusée à l'hôte distant
  • question concernant le déplacement des adresses IP d'une boîte linux vers une autre
  • L'activation de UFW arrête le fonctionnement de mon client de messagerie (imap et smtp) même s'ils sont autorisés?
  • Réaliser un nouvel user ssh sur une boîte Centos
  • Raccordement sans key SSH sur CentOS 6 avec key publique
  • Sauvegarde et restaure de gros files dans Windows Server 2008
  • OpenVpn et SSH écoutent
  • Amanda Backup entre réseaux restreints
  • L'ouverture de la key SSH ne fonctionne pas
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.