Hinweise zur Verwaltung von SSH-Schlüsseln

13

Was ist die beste Vorgehensweise, die Sie für die Verwaltung vieler SSH-Schlüsselpaare gefunden haben?

Ich verwende SSH, um eine Verbindung zu mehreren Systemen herzustellen, sowohl zu Hause als auch bei der Arbeit. Derzeit habe ich eine relativ kleine, überschaubare Sammlung von Schlüsselpaaren für Arbeits- und Heimsysteme. Ich habe ein Skript, das ein benanntes Schlüsselpaar generiert, um Verwirrung zu vermeiden.

Mein Heimnetzwerk besteht aus meinem Laptop (Ubuntu), zwei Desktops (Ubuntu / Fedora Dual Boot, Fedora / Windows Dual Boot) und einem Mediensystem (Ubuntu). Bei der Arbeit habe ich meinen persönlichen Laptop (mit dem ich von zu Hause aus arbeite), meinen Desktop (Fedora), ein Produktionssystem (RHEL) und einen Laptop mit Windows (Seufzer) und eine VM (Fedora). Alles gut soweit.

(Ich habe kein Interesse daran, mein Home-Schlüsselpaar auf meinem Arbeitssystem oder mein Work-Schlüsselpaar auf meinem Home-System zu platzieren. Außerdem verfügen wir über virtuelle Benutzerkonten, um die Dateiübertragung mit anderen Systemen zu mechanisieren, auf denen sich der private Schlüssel auf dem Produktionscomputer befinden muss.) Dateien zwischen anderen Systemen übertragen.)

Aber jetzt kommt Hadoop, ein großer Cluster von über 100 Systemen, und das mit mehr Komplexität, mehr Benutzern und mehr Schlüsselpaaren. Jetzt muss ich Schlüssel verwalten.

(Ich muss es klarstellen. Ich bin ein Softwareentwickler, der einen Client berät, der einen Hadoop-Cluster bereitstellt. Er muss Schlüssel verwalten. Viele Benutzer greifen auf den Cluster zu und müssen ihre öffentlichen Schlüssel auf dem System ablegen. Als Bewohner Linux Savant, sie haben mich um Hilfe gebeten. Ich habe geraten, einen Systemadministrator zu beauftragen, aber bis sie das tun, helfe ich)

Wenn ich den öffentlichen Schlüssel auf einem Remote-System veröffentlichen muss, wird auf allen "How-to" -Webseiten vorgeschlagen, entweder vorhandene Schlüssel zu überschreiben (>) (zu zerstören) oder anzufügen (>>) (was gut ist, vorhandene Schlüssel beizubehalten) . Ich würde jedoch denken, dass es besser wäre, jeden öffentlichen Schlüssel auf dem Zielcomputer separat beizubehalten und zu kombinieren. Ich suche Rat.

Was ist die beste Vorgehensweise, die Sie für die Verwaltung vieler Schlüssel gefunden haben?

Vielen Dank!


Bearbeiten: Ein Aspekt ist das Platzieren von Schlüsseln auf vielen Systemen und das damit verbundene CRUD (Erstellen, Lesen, Aktualisieren, Löschen / Deaktivieren) für bestimmte Benutzer, was bedeutet, dass in der Lage sein muss, zu identifizieren, welche Schlüssel zu welchen Benutzern gehören.

ChuckCottrill
quelle
Sprechen Sie über Benutzer- oder Host-Schlüsselpaare? sshfpBehebt das Problem mit dem Hostschlüssel, indem die Signaturen des öffentlichen Schlüssels im DNS abgelegt werden. Für Benutzeranmeldeinformationen möchten Sie möglicherweise OpenSSH-Zertifikate untersuchen oder Spacewalk oder Puppet verwenden, um alle Schlüsselpaare an einem zentralen Ort zu speichern und nach Bedarf bereitzustellen. Klingt so, als würden Sie wahrscheinlich Letzteres wollen, da Sie einfach den neuen Server als Client einrichten und dann die neueste Version der Datei bereitstellen würden.
Bratchley
Ich habe einen anderen Laptop (Fedora), MyBook Live-Netzwerkfestplatten (unter Linux), zwei eingebaute Desktops, die auf Festplatten warten, und zwei weitere, die einen Home Hadoop-Cluster aufbauen sollen (Lernen). Ja, ich muss die Schlüsselverwaltung verstehen.
ChuckCottrill

Antworten:

12

Im Allgemeinen sollten Sie nicht mehr als 1 Schlüssel pro Client-Computer haben (Betonung auf "allgemein"). Ich bin mir nicht sicher, ob ich Ihre Frage richtig verstehe, aber wenn Sie sagen, dass Sie für jedes Remote-System einen eigenen Schlüssel haben, dann machen Sie es definitiv falsch.

Ssh verwendet die Kryptographie mit öffentlichen Schlüsseln. Der Schlüssel, den Sie auf dem Remote-System installieren, ist der öffentliche Schlüssel. Die Wiederverwendung dieses Schlüssels an anderer Stelle ist absolut harmlos. Es ist der private Schlüssel, der geschützt werden muss und auf Ihrem persönlichen System verbleibt.

Es ist auch eine gute Idee, den privaten Schlüssel auf nur einem Client zu haben, der nicht gemeinsam genutzt wird. Auf diese Weise können Sie bei einer Kompromittierung eines Clients nur diesen einen Schlüssel widerrufen.


Wenn Sie sich nun fragen, wie Sie Ihren öffentlichen Schlüssel für Hunderte von Systemen bereitstellen können, haben Sie mehrere Möglichkeiten, dies zu tun.

Am häufigsten werden freigegebene Basisverzeichnisse verwendet. Lassen Sie ein NFS (oder ein anderes Netzwerkdateisystem) alle Systeme mounten (oder automounten).

Die andere Möglichkeit besteht darin, eine neue Funktion in ssh zu nutzen. Es ist eine Konfigurationsanweisung namens AuthorizedKeysCommand. Grundsätzlich handelt es sich um einen Befehl, den sshd jedes Mal ausführt, wenn ein öffentlicher Schlüssel gesucht werden muss. Der Befehl schreibt einfach den öffentlichen Schlüssel des abgefragten Benutzers auf STDOUT. Dies wird hauptsächlich verwendet, wenn Sie keine Basisverzeichnisse bereitgestellt haben, aber dennoch über einen zentralen Authentifizierungsserver verfügen (dies wird von FreeIPA genutzt ).

Natürlich können Sie auch andere Dinge wie Cron Job Rsync /homevon einem zentralen Server aus ausführen. Aber das ist keine gängige Praxis.

Patrick
quelle
Ich habe zu Hause 8 Maschinen und eine variable Anzahl von "Servern" in der Cloud (nach Bedarf skaliert). Es wäre albern, 300 Client-Schlüssel zu haben, wenn ich auf 300 Server-Instanzen skaliere. Ich habe also 16 öffentliche Schlüssel (2 Benutzer pro 8 Hosts). Bei harten Maschinen drücke ich alle 3 Monate Schlüssel. Für Cloud-Instanzen werden sie in das benutzerdefinierte Image integriert.
Skaperen
2

Wenn ich den öffentlichen Schlüssel auf einem Remote-System veröffentlichen muss, wird auf allen "How-to" -Webseiten vorgeschlagen, entweder vorhandene Schlüssel zu überschreiben (>) (zu zerstören) oder anzufügen (>>) (was gut ist, vorhandene Schlüssel beizubehalten). . Ich würde jedoch denken, dass es besser wäre, jeden öffentlichen Schlüssel auf dem Zielcomputer separat beizubehalten und zu kombinieren. Ich suche Rat.a

Ich sehe keinen Vorteil darin, die öffentlichen Schlüssel sowohl in .ssh/authorized_keysals auch in einer separaten Datei zu speichern.

Wenn Sie sich die tatsächlichen Schlüssel ansehen, die in der Datei * authorized_keys * gespeichert sind, sehen Sie, dass sie bereits für Menschen lesbare Metainformationen über die Herkunft des Schlüssels enthalten. zB der öffentliche Schlüssel für hat user@foonormalerweise einen Eintrag wie:

ssh-rsa AAAAB3Nza...LiPk== [email protected]

Dies macht es sehr einfach, bestimmte (an bestimmte Benutzer angehängte) Schlüssel aus der * authorized_keys * -Datei zu überprüfen, zu extrahieren oder zu löschen.

Die Benutzer-ID ist in Wirklichkeit ein frei formuliertes "Kommentar" -Feld, in das Sie alle Informationen eintragen können, die Sie zur Identifizierung des angegebenen Schlüssels für erforderlich halten.

In jedem Fall sollten Sie nur Schlüsselpaare für "Benutzer" generieren, die auf Remote-Ressourcen zugreifen müssen. Es besteht die Möglichkeit, dass Sie sich nicht von jedem hadoop-Host bei jedem anderen hadoop-Host anmelden müssen. Stattdessen verfügen Sie über einige Verwaltungscomputer, die auf alle Hadoop-Hosts zugreifen müssen. Sie benötigen nur ein einziges Schlüsselpaar pro Verwaltungscomputer und installieren jeden öffentlichen Schlüssel auf allen Hadoop-Hosts.

umläute
quelle
Jeder Benutzer generiert seine eigenen Schlüssel. Ich glaube, Sie sagen, jeder Benutzer sollte als Teil der Schlüsselherkunft Benutzername @ Hostname angeben. Was bedeutet, dass ein Skript bereitgestellt wird, das diesen Benutzernamen @ Hostnamen erzwingt, richtig?
ChuckCottrill
es kommt darauf an, wie sie ihre Schlüssel erstellen; zB ssh-keygenwird ein Kommentar der Form hinzugefügt user@host; Andere Schlüsselgeneratoren (wie der mit Putty gelieferte) tun dies möglicherweise nicht. aber ja, es sollte trivial sein, ein kleines Skript zu erstellen, das sicherstellt, dass jeder Schlüssel ein Kommentarfeld hat, das eine Benutzer / Host-Kombination identifiziert.
Umläute
0

Eine andere Möglichkeit, die sehr einfach zu implementieren ist und etwas mehr Flexibilität beim Hinzufügen mehrerer Benutzer bietet, ist die Verwendung. https://userify.com/

Sie können verschiedene Servergruppen definieren und Schlüssel für verschiedene Benutzer für diese Server aktivieren oder deaktivieren.

Super einfache Installation und Verwaltung.

Nelaaro
quelle