GNU/Linux >> Tutoriales Linux >  >> Linux

Comando de Linux para esperar a que un servidor SSH esté activo

Solución 1:

No tengo un host al que pueda acceder y controlar si está activo o no, pero esto debería funcionar:

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

O un script de shell que sea más explícito:

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

Guárdelo como (digamos) waitforssh.sh y luego llamarlo con sh waitforssh.sh 192.168.2.38

Solución 2:

Algo simple como esto hace el trabajo, esperando 5 segundos entre intentos y descartando STDERR

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

Solución 3:

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

-o ConnectTimeout=2 es una forma un poco complicada de evitar responder a los paquetes de red, informando ssh: connect to host 10.10.0.3 port 22: Operation timed out hasta que responda.

Luego, cuando el host responde a los paquetes de red, el sueño de 1 segundo ocurre entre ssh: connect to host 10.10.0.3 port 22: Connection refused mientras esperamos que aparezca ssh.

Solución 4:

Este es un script 'ping_ssh' que estoy usando. Maneja casos de tiempo de espera, éxito rápido y no solicita contraseñas ni se deja engañar por el puerto abierto pero que no responde como con las soluciones basadas en 'nc'. Esto combina varias respuestas encontradas en varios sitios relacionados con 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 consejos para la línea de comandos de Linux

  2. 12 ejemplos de comandos IP para usuarios de Linux

  3. Comando W en Linux

  4. Al mando en Linux

  5. Comando killall de Linux para principiantes (8 ejemplos)

Comando de localización de Linux para principiantes (8 ejemplos)

16 ejemplos prácticos del comando Linux LS para principiantes

Comando mv de Linux explicado para principiantes (8 ejemplos)

Comando ls en Linux para listar archivos

Comando de espera en Linux con ejemplos

Cómo SSH al servidor a través de Linux