GNU/Linux >> Belajar Linux >  >> Linux

Perintah Linux untuk menunggu server SSH aktif

Solusi 1:

Saya tidak memiliki host yang dapat saya ssh dan kendalikan apakah aktif atau tidak, tetapi ini seharusnya berfungsi:

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

Atau skrip shell yang lebih eksplisit:

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

Simpan sebagai (katakanlah) waitforssh.sh lalu panggil dengan sh waitforssh.sh 192.168.2.38

Solusi 2:

Sesuatu yang sederhana seperti ini berhasil, menunggu 5 detik antara percobaan dan membuang STDERR

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

Solusi 3:

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

-o ConnectTimeout=2 adalah cara yang sedikit curang untuk menghindari tidak menanggapi paket jaringan, melaporkan ssh: connect to host 10.10.0.3 port 22: Operation timed out sampai responsif.

Kemudian, ketika host merespons paket jaringan, 1 detik tidur terjadi di antara ssh: connect to host 10.10.0.3 port 22: Connection refused saat kami menunggu ssh muncul.

Solusi 4:

Ini adalah skrip 'ping_ssh' yang saya gunakan. Ini menangani kasus batas waktu, sukses cepat, dan tidak akan meminta kata sandi atau tertipu oleh port yang terbuka tetapi tidak merespons seperti solusi berbasis 'nc'. Ini menggabungkan beberapa jawaban yang ditemukan di berbagai situs terkait 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 tips untuk baris perintah Linux

  2. 12 Contoh Perintah IP untuk Pengguna Linux

  3. Perintah killall Linux untuk Pemula (8 Contoh)

  1. Perintah W di Linux

  2. Di Perintah di Linux

  3. Perintah dir Linux untuk pemula (10 contoh)

  1. Perintah Linux rm Dijelaskan untuk Pemula (8 Contoh)

  2. Tutorial Perintah Linux ln untuk Pemula (5 Contoh)

  3. Tutorial Perintah Linux nl untuk Pemula (7 Contoh)