Einige SSH-Benutzerauthentifizierungen schlagen in einer großen Flut solcher Authentifizierungen fehl

480
Dave

Ich arbeite mit einem Cluster von 20 Hosts, die alle mit CentOS 7.3 arbeiten.

Ich versuche, einen automatisierten Test zu erstellen, um Folgendes zu prüfen:

  1. Unsere erwartete Netzwerkverbindung ist vorhanden
  2. Unsere SSH-Lösung für einmaliges Anmelden (SSO) funktioniert

Die erwartete Netzwerkverbindung ist sehr einfach: Es handelt sich um ein einzelnes, flaches Subnetz. Jeder Host sollte in der Lage sein, jeden anderen Host zu erreichen.

Unsere SSH-SSO-Lösung (FreeIPA) verwendet Kerberos zum Authentifizieren von Benutzern und öffentliche SSH-Schlüssel zum Authentifizieren von Hosts. Das Kerberos Ticket Granting Ticket (TGT) eines Benutzers wird so eingestellt, dass es an jeden Host weitergeleitet wird, mit dem sich der Benutzer über SSH verbindet.

Der Test ist sehr einfach:

Lassen Sie jeden Host versuchen, SSH zu verwenden, um hostname als Remote-Befehl auf jedem anderen Host auszuführen .

Dazu benutze ich ein Dienstprogramm namens pdsh .

Kurz gesagt, dieses Dienstprogramm verwendet SSH, um einen Remote-Befehl auf einer Reihe von Hosts auszuführen. Dies geschieht parallel, indem für jeden Host und für jeden dieser Threads ein Thread gestartet wird, der den Befehl ssh ausführt .

Ich verwende diesen Befehl wie folgt. Auf einem Computer, der keiner der 20 Cluster-Hosts ist, führe ich diesen Befehl aus:

pdsh -g all 'pdsh -g all "hostname"' 

-g all gibt an, dass der Remote-Befehl auf allen Clusterhosts ausgeführt werden soll. Wie gesagt, ich habe 20 Cluster-Hosts.

Der auf jedem Remote-Host auszuführende Befehl lautet:

pdsh -g all "hostname" 

Wie bereits erwähnt, versucht jeder Host, den Befehl "hostname" auf jedem anderen Host als Remote-Befehl über SSH auszuführen.

Dies führt also zu 20 Aufrufen (eine pro Clusterhost) von:

ssh 'pdsh -g all "hostname"' 

Dies führt wiederum zu 20 * 20 = 400 Anrufen von:

ssh <hostname> hostname 

Ich habe also insgesamt 20 + 400 = 420 SSH-Authentifizierungen in sehr kurzer Zeit.

Das Problem, das ich sehe, ist eine kleine Handvoll Authentifizierungsfehler. Die Hosts, auf denen der Fehler auftritt, sind willkürlich. Es gibt keinen Grund oder Reim. Ein Fehler sieht folgendermaßen aus:

host-5: host-3: Permission denied, please try again. host-5: host-3: Permission denied, please try again. host-5: host-3: Received disconnect from UNKNOWN: 2: Too many authentication failures for myuser host-5: pdsh@host-5: host-3: ssh exited with exit code 255 

Ich habe Folgendes in / etc / ssh / sshd_config konfiguriert, damit viele zu authentifizierende Sitzungen gleichzeitig vorhanden sein können:

MaxStartups 500:30:600 

Beachten Sie, dass dies viel zu viel ist - dies ist für die Anzahl der im Cluster stattfindenden Authentifizierungen verantwortlich, es muss jedoch nur die Anzahl der Authentifizierungen berücksichtigt werden, die auf einem bestimmten Host erfolgen. Ich denke, das Problem liegt woanders.

Zusammenfassend kann ich sagen, dass ich eine große Anzahl von SSH-Benutzerauthentifizierungen über Kerberos in einem Cluster von 20 Hosts in sehr kurzer Zeit erhalten habe. Zufällige Fehler der Benutzerauthentifizierung treten auf.

Warum können solche Benutzerauthentifizierungsfehler auftreten?

1

1 Antwort auf die Frage

1
Michael Ströder

Wenn Sie SSH-Sitzungen auf denselben Hosts erneut öffnen, empfehle ich die Verwendung von Kontroll-Master-Verbindungen. Grundsätzlich wird eine authentifizierte Sitzung von Client und Server gehalten, um eine wiederholte Authentifizierung zu vermeiden.

Siehe auch: ssh_config (5) - ControlMaster