GNU/Linux >> Linux Esercitazione >  >> Linux

Comando Linux per attendere che un server SSH sia attivo

Soluzione 1:

Non ho un host a cui posso inviare tramite ssh e controllare se è attivo o meno, ma dovrebbe funzionare:

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

O uno script di shell più esplicito:

#!/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

Salvalo come (diciamo) waitforssh.sh e poi chiamalo con sh waitforssh.sh 192.168.2.38

Soluzione 2:

Qualcosa di semplice come questo fa il lavoro, aspettando 5 secondi tra i tentativi e scartando STDERR

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

Soluzione 3:

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

-o ConnectTimeout=2 è un modo un po' confuso per evitare di rispondere ai pacchetti di rete, segnalando ssh: connect to host 10.10.0.3 port 22: Operation timed out finché non risponde.

Quindi, quando l'host risponde ai pacchetti di rete, il secondo di sospensione si verifica tra ssh: connect to host 10.10.0.3 port 22: Connection refused mentre aspettiamo che arrivi ssh.

Soluzione 4:

Questo è uno script 'ping_ssh' che sto usando. Gestisce i casi di timeout, il successo rapido e non richiede password né viene ingannato dal fatto che la porta sia aperta ma non risponda come con le soluzioni basate su 'nc'. Questo combina diverse risposte trovate su vari siti correlati a 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 suggerimenti per la riga di comando di Linux

  2. 12 Esempi di comandi IP per utenti Linux

  3. Comando W in Linux

  4. Al comando in Linux

  5. Comando killall Linux per principianti (8 esempi)

Comando di localizzazione Linux per principianti (8 esempi)

16 Esempi pratici di comando Linux LS per principianti

Spiegazione del comando Linux mv per principianti (8 esempi)

Comando ls in Linux per elencare i file

Attendi comando in Linux con esempi

Come eseguire l'SSH sul server tramite Linux