Jak sprawdzić, czy mogę zalogować się do serwera przez ssh?

13

Mam listę serwerów:

cat list.txt
10.10.10.10 servera
10.11.10.10 serverb

Jak mogę sprawdzić, czy mogę się do nich zalogować przez ssh, czy nie? Mam na myśli, że powinienem być w stanie zalogować się za pomocą klucza ssh auth .., więc w skrócie, potrzebuję rozwiązania, które sortuje linie (serwery) na list.txt w następujący sposób:

  • serwery, które mogę zalogować za pomocą klucza ssh
  • serwery pytające o hasło (oczywiście hasło jest nieznane ..)
  • serwery, które są nieosiągalne
LanceBaynes
źródło
za pomocą komend ssh i ping możesz to osiągnąć
Balaswamy vaddeman
pingnie jest tak naprawdę dobrym wskaźnikiem. Istnieje wiele ustawień, które umożliwiają sshpołączenia, ale nie odpowiadają na pingi.
Mat.

Odpowiedzi:

25

Możesz to zrobić za pomocą kombinacji BatchModeopcji i „parsowania” danych wyjściowych. ( sshzawsze zwraca 255, jeśli nie uda się połączyć z jakiegokolwiek powodu, więc nie można użyć kodu powrotu do rozróżnienia typów awarii).

Po BatchModewłączeniu nie jest podejmowana próba podania hasła ani innej interakcji, więc połączenie wymagające hasła zakończy się niepowodzeniem. (Umieściłem ConnectTimeouttam również element, który powinien być dostosowany do twoich potrzeb. I wybrałem naprawdę złe nazwy plików).

#! /bin/bash

rm good no_auth other
while read ip host ; do
    status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 $ip echo ok 2>&1)
    case $status in
        ok) echo $ip $host >> good ;;
        *"Permission denied"*) echo $ip $host $status >> no_auth ;;
        *) echo $ip $host $status >> other ;;
    esac
done < list.txt

Możesz wykryć inne rodzaje błędów (np. Brak klucza publicznego serwera), jeśli potrzebujesz bardziej szczegółowej klasyfikacji. Jeśli potrzebujesz wyników w jednym posortowanym pliku, po prostu catróżne pliki wyjściowe razem, jak uważasz za stosowne.

Mata
źródło
1

Wyszukaj różne narzędzia automatyzujące uruchamianie poleceń na wielu hostach za pośrednictwem ssh. Na przykład z Mussh :

mussh -H hosts.txt -o ConnectTimeout=5 -P -d -c 'echo `hostname` is alive'

W razie potrzeby masuj wyjście.

Uwaga dodatkowa: dlaczego przechowujesz adresy IP list.txt? Nazwy serwerów są wystarczające. Jeśli nazwy, których chcesz użyć, nie są nazwami DNS, skorzystaj z Hostdyrektyw w ~/.ssh/config.

Gilles „SO- przestań być zły”
źródło
0
servers that I can log in via ssh key
servers that prompts for password (of course password is unknown..)

Spodziewaj się, że dostarczy danych wejściowych do twoich interaktywnych poleceń. Klient ssh z flagą -v powie ci, jakie metody autoryzacji akceptuje serwer. Jeśli pojawi się interaktywny monit, zakończ go. Rób, co chcesz, masz wszystko, czego potrzebujesz.

servers that are unreachable

To samo, jedno polecenie, aby rządzić nimi wszystkimi, a w ciemności związać ich ... Hum.

Aki
źródło
0

Polecenie mussh wyświetli tylko błędy, więc możesz po prostu uruchomić go bez debugowania.

$ cat list.txt
10.1.2.93       trustme
10.1.2.92       wobudong
10.41.41.41     failhost

$ awk '{print $2}' list.txt | mussh -H - -t 10 -m -c hostname
trustme: trustme
failhost: ssh: Could not resolve hostname failhost: Name or service not known
wobudong: ssh: connect to host wobudong port 22: Connection timed out
pdxdoughnut
źródło