GNU/Linux >> Tutoriels Linux >  >> Linux

Commande Linux pour attendre qu'un serveur SSH soit opérationnel

Solution 1 :

Je n'ai pas d'hôte vers lequel je peux me connecter en ssh et contrôler s'il fonctionne ou non, mais cela devrait fonctionner :

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

Ou un script shell 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 sous (par exemple) waitforssh.sh puis appelez-le avec sh waitforssh.sh 192.168.2.38

Solution 2 :

Quelque chose de simple comme celui-ci fait le travail, attend 5 secondes entre les tentatives et supprime STDERR

until ssh <host> 2> /dev/null
  do
    sleep 5
  done

Solution 3 :

function hurryup () { 
    until ssh -o ConnectTimeout=2 "$1"@"$2"
        do sleep 1
    done
}
hurryup root "10.10.0.3"

-o ConnectTimeout=2 est un moyen légèrement piraté de se déplacer en ne répondant pas aux paquets réseau, en signalant ssh: connect to host 10.10.0.3 port 22: Operation timed out jusqu'à ce qu'il soit réactif.

Ensuite, lorsque l'hôte répond aux paquets réseau, la seconde de sommeil se produit entre ssh: connect to host 10.10.0.3 port 22: Connection refused en attendant que ssh se lance.

Solution 4 :

C'est un script 'ping_ssh' que j'utilise. Il gère les cas d'expiration, le succès rapide et ne demandera pas de mots de passe ni ne sera trompé par le fait que le port est ouvert mais ne répond pas comme avec les solutions basées sur 'nc'. Cela combine plusieurs réponses trouvées sur divers sites liés à stackoverflow.

#!/usr/bin/bash
HOST=$1
PORT=$2
#HOST="localhost"
#PORT=8022
if [ -z "$1" ]
  then
    echo "Missing argument for host."
    exit 1 
fi

if [ -z "$2" ]
  then
    echo "Missing argument for port."
    exit 1 
fi
echo "polling to see that host is up and ready"
RESULT=1 # 0 upon success
TIMEOUT=30 # number of iterations (5 minutes?)
while :; do 
    echo "waiting for server ping ..."
    # https://serverfault.com/questions/152795/linux-command-to-wait-for-a-ssh-server-to-be-up
    # https://unix.stackexchange.com/questions/6809/how-can-i-check-that-a-remote-computer-is-online-for-ssh-script-access
    # https://stackoverflow.com/questions/1405324/how-to-create-a-bash-script-to-check-the-ssh-connection
    status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 ${HOST} -p ${PORT} echo ok 2>&1)
    RESULT=$?
    if [ $RESULT -eq 0 ]; then
        # this is not really expected unless a key lets you log in
        echo "connected ok"
        break
    fi
    if [ $RESULT -eq 255 ]; then
        # connection refused also gets you here
        if [[ $status == *"Permission denied"* ]] ; then
            # permission denied indicates the ssh link is okay
            echo "server response found"
            break
        fi
    fi
    TIMEOUT=$((TIMEOUT-1))
    if [ $TIMEOUT -eq 0 ]; then
        echo "timed out"
        # error for jenkins to see
        exit 1 
    fi
    sleep 10
done

Linux
  1. 8 conseils pour la ligne de commande Linux

  2. 12 exemples de commandes IP pour les utilisateurs Linux

  3. Commande W sous Linux

  4. À la commande sous Linux

  5. Commande Linux killall pour les débutants (8 exemples)

Commande de localisation Linux pour les débutants (8 exemples)

16 exemples pratiques de commande Linux LS pour les débutants

Explication de la commande Linux mv pour les débutants (8 exemples)

Commande ls sous Linux pour lister les fichiers

Commande Wait sous Linux avec des exemples

Comment SSH au serveur via Linux