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

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

Ich arbeite mit einem Cluster aus 20 Hosts, auf denen alle CentOS 7.3 läuft.

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

  1. Unsere erwartete Netzwerkkonnektivität ist vorhanden
  2. Unsere SSH Single Sign On (SSO) Lösung funktioniert

Die erwartete Netzwerkkonnektivität ist sehr einfach: Es handelt sich um ein einzelnes, flaches Subnetz. Jeder Host sollte jeden anderen Host erreichen können.

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

Der Test ist ganz einfach:

Lassen Sie jeden Host versuchen, SSH zur Ausführung zu verwendenHostnameals Remote-Befehl auf jedem anderen Host.

Dazu verwende ich ein Dienstprogramm namenspdsh.

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

Ich verwende diesen Befehl folgendermaßen. Auf einer Maschine, die nicht zu den 20 Cluster-Hosts gehört, führe ich diesen Befehl aus:

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

-g allegibt an, dass der Remote-Befehl auf allen Cluster-Hosts ausgeführt werden soll. Wie angegeben habe ich 20 Cluster-Hosts.

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

pdsh -g all "hostname"

Wie oben beschrieben, versucht also jeder Host, den Befehl „Hostname“ auf jedem anderen Host als Remote-Befehl über SSH auszuführen.

Dies führt zu 20 Aufrufen (einer pro Cluster-Host) von:

ssh 'pdsh -g all "hostname"'

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

ssh <hostname> hostname

Ich habe also insgesamt 20 + 400 = 420 SSH-Authentifizierungen innerhalb eines sehr kurzen Zeitraums.

Das Problem, das ich sehe, sind eine Handvoll Authentifizierungsfehler. Die Hosts, auf denen der Fehler auftritt, sind beliebig. Es gibt keinen Sinn und Zweck. 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 konfiguriert in/etc/ssh/sshd_configum das gleichzeitige Bestehen mehrerer zu authentifizierender Sitzungen zu ermöglichen:

MaxStartups 500:30:600

Beachten Sie, dass dies viel zu viel des Guten ist. Es berücksichtigt die Anzahl der Authentifizierungen, die im gesamten Cluster stattfinden, aber es muss eigentlich nur die Anzahl der Authentifizierungen berücksichtigen, die auf einem bestimmten Host stattfinden. Ich denke also, das Problem liegt woanders.

Zusammenfassend kann ich sagen, dass ich in einem Cluster von 20 Hosts in sehr kurzer Zeit eine große Anzahl von SSH-Benutzerauthentifizierungen über Kerberos festgestellt habe. Es kommt zu zufälligen Fehlern bei der Benutzerauthentifizierung.

Warum können solche Fehler bei der Benutzerauthentifizierung auftreten?

Antwort1

Wenn Sie SSH-Sitzungen zu denselben Hosts erneut öffnen, empfehle ich die Verwendung von Control-Master-Verbindungen. Grundsätzlich wird eine authentifizierte Sitzung von Client und Server aufrechterhalten, wodurch eine wiederholte Authentifizierung vermieden wird.

Siehe auch:ssh_config(5) -- Kontrollmaster

verwandte Informationen