Come verificare se posso accedere al server tramite ssh?


13

Ho un elenco di server:

cat list.txt
10.10.10.10 servera
10.11.10.10 serverb

Come posso verificare di poter accedere tramite ssh o no? Voglio dire, per impostazione predefinita, dovrei essere in grado di accedere tramite autenticazione chiave ssh .., quindi in breve, ho bisogno di una soluzione che ordina le linee (server) in list.txt in questo modo:

  • server a cui posso accedere tramite chiave ssh
  • server che richiedono la password (ovviamente la password è sconosciuta ..)
  • server che non sono raggiungibili

con l'aiuto dei comandi ssh e ping puoi ottenerlo
Balaswamy vaddeman

pingnon è davvero un buon indicatore. Esistono molte configurazioni che consentono le sshconnessioni ma non rispondono ai ping.
Mat

Risposte:


25

Puoi farlo con una combinazione BatchModedell'opzione e "analizzando" l'output. ( sshrestituisce sempre 255 se non riesce a connettersi per qualsiasi motivo, quindi non è possibile utilizzare il codice di ritorno per distinguere i tipi di errori.)

Con BatchModeon, non viene tentata alcuna richiesta di password o altra interazione, quindi una connessione che richiede una password non riuscirà. (Ho anche inserito un file ConnectTimeoutche dovrebbe essere adattato alle tue esigenze. E ho scelto nomi di file davvero pessimi.)

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

È possibile rilevare altri tipi di errori (come la chiave pubblica del server mancante) se è necessaria una classificazione più dettagliata. Se hai bisogno dei risultati in un singolo file ordinato, solo cati vari file di output insieme come ritieni opportuno.


1

Cerca i vari strumenti che automatizzano l'esecuzione di comandi su più host tramite ssh. Ad esempio, con Mussh :

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

Massaggia l'output secondo necessità.

Nota a margine: perché stai memorizzando gli indirizzi IP list.txt? I nomi dei server sono sufficienti. Se i nomi che si desidera utilizzare non sono i nomi DNS, utilizzare le Hostdirettive in ~/.ssh/config.


0
servers that I can log in via ssh key
servers that prompts for password (of course password is unknown..)

prevedere fornirà input ai tuoi comandi interattivi. Il client ssh con il flag -v ti dirà quali metodi di autenticazione accetta il server. Se arrivi al prompt interattivo, fallo uscire. Fai quello che vuoi, hai tutto ciò di cui hai bisogno.

servers that are unreachable

Lo stesso, un comando per governarli tutti, e nell'oscurità, legarli ... Hum.


0

Il comando mussh genererà solo errori, quindi puoi semplicemente eseguirlo senza eseguire il debug.

$ 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.