Wie überprüfe ich, ob ich mich über ssh beim Server anmelden kann?

13

Ich habe eine Liste von Servern:

cat list.txt
10.10.10.10 servera
10.11.10.10 serverb

Wie kann ich überprüfen, ob ich mich über ssh bei ihnen anmelden kann oder nicht? Ich meine, standardmäßig sollte ich mich über ssh key auth anmelden können. Kurz gesagt, ich brauche eine Lösung, die die Zeilen (Server) in der list.txt wie folgt sortiert:

  • Server, die ich über SSH-Schlüssel anmelden kann
  • Server, die zur Eingabe eines Passworts auffordern (das Passwort ist natürlich unbekannt ..)
  • Server, die nicht erreichbar sind
LanceBaynes
quelle
mit Hilfe von ssh und ping-Befehlen können Sie es erreichen
Balaswamy vaddeman
pingist nicht wirklich ein guter Indikator. Es gibt viele Setups, die sshVerbindungen zulassen , aber nicht auf Pings antworten.
Mat

Antworten:

25

Sie können dies mit einer Kombination aus der BatchModeOption und dem "Parsen" der Ausgabe tun . ( sshGibt immer 255 zurück, wenn die Verbindung aus irgendeinem Grund nicht hergestellt werden kann, sodass Sie den Rückkehrcode nicht zur Unterscheidung zwischen Fehlertypen verwenden können.)

Mit BatchModeauf, wird keine Passwortabfrage oder andere Interaktion versucht, so einen connect , die ein Passwort fehl erfordert. (Ich habe dort auch einen ConnectTimeouteingefügt, der an Ihre Bedürfnisse angepasst werden sollte. Und wirklich schlechte Dateinamen ausgewählt.)

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

Sie können andere Arten von Fehlern erkennen (z. B. das Fehlen eines öffentlichen Schlüssels für den Server), wenn Sie eine detailliertere Klassifizierung benötigen. Wenn Sie die Ergebnisse in einer einzelnen, sortierten Datei benötigen, können Sie catdie verschiedenen Ausgabedateien nach Belieben zusammenfassen.

Matte
quelle
1

Informieren Sie sich über die verschiedenen Tools, die die Ausführung von Befehlen auf mehreren Hosts über ssh automatisieren. Zum Beispiel mit Mussh :

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

Massieren Sie den Ausgang nach Bedarf.

Randnotiz: Warum speichern Sie IP-Adressen in list.txt? Servernamen sind genug. Wenn die Namen, die Sie verwenden möchten, nicht die DNS-Namen sind, verwenden Sie die HostAnweisungen in ~/.ssh/config.

Gilles 'SO - hör auf böse zu sein'
quelle
0
servers that I can log in via ssh key
servers that prompts for password (of course password is unknown..)

expect liefert Eingaben für Ihre interaktiven Befehle. Der ssh-Client mit dem Flag -v gibt an, welche Authentifizierungsmethoden der Server akzeptiert. Wenn Sie zur interaktiven Eingabeaufforderung gelangen, beenden Sie diese. Tu was du willst, du hast alles was du brauchst.

servers that are unreachable

Gleich, ein Befehl, sie alle zu regieren und in der Dunkelheit sie zu binden ... Summen.

Aki
quelle
0

Der Befehl mussh gibt nur Fehler aus, Sie können ihn also einfach ohne Debug ausführen.

$ 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
quelle