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.
sshfp
Behebt 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.Antworten:
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
/home
von einem zentralen Server aus ausführen. Aber das ist keine gängige Praxis.quelle
Ich sehe keinen Vorteil darin, die öffentlichen Schlüssel sowohl in
.ssh/authorized_keys
als 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@foo
normalerweise einen Eintrag wie: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.
quelle
ssh-keygen
wird ein Kommentar der Form hinzugefügtuser@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.Aktuelle OpenSSH- Versionen ermöglichen das Abrufen von SSH- Schlüsseln aus LDAP (siehe 'AuthorizedKeysCommand' in der Manpage sshd_config) . Persönlich würde ich OpenSSH-Zertifikate bevorzugen, keine Schlüssel, siehe http://blog.habets.pp.se/2011/07/OpenSSH-certificates . Sie können die Schlüssel mit jedem Konfigurationsmanager wie cfengine, puppet, chef, salt ... verwalten.
quelle
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.
quelle