Ist es möglich, die öffentlichen Schlüssel aus einer Datenbank anstelle der Datei authorized_keys abzurufen?
Ich möchte ein solches Setup verwenden, um den SSH-Zugriff auf Dinge wie Git-Repositorys für mehrere Benutzer zu verwalten, ohne die authorized_keys-Datei jedes Mal neu erstellen zu müssen, wenn ein öffentlicher Schlüssel geändert oder hinzugefügt wird.
database
ssh
public-key
Fionn
quelle
quelle
Antworten:
Ich habe diese Frage gefunden, als ich versuchte, sie selbst zu beantworten. Nach einigem Suchen und Experimentieren habe ich ein paar andere Optionen dafür gefunden. Ich werde den Teil über das Verteilen von Schlüsseln als Alternative überspringen, da Matt Simmons das behandelt hat. Ich weiß auch, dass es Zeiten gibt, in denen das nicht gut genug ist. Wenn Sie beispielsweise GitHub sind und Millionen öffentlicher Schlüssel für einen einzelnen Benutzer speichern müssen, ist es nicht machbar oder wünschenswert, SSH-autorisierte Schlüsseldateien fortlaufend zu aktualisieren und über potenziell Dutzende bis Hunderte von Edge-Boxen hinweg synchron zu halten.
So,
Zunächst haben RedHat (und Varianten) einen unterstützten Patch für OpenSSH, der die Optionen
AuthorizedKeysCommand
und hinzufügtAuthorizedKeysCommandRunAs
. Der Patch wurde in openssh 6.2 upstream zusammengeführt. So zitieren Sie aus der Manpage :In meinen heutigen Experimenten habe ich festgestellt, dass dies aufgrund von SELinux-Standardrichtlinien nicht funktioniert. Sie können dies umgehen, indem Sie die SELinux-Erzwingung mit deaktivieren
setenforce 0
. Da das Ausschalten von SELinux wahrscheinlich eine schlechte Idee ist, können Sie stattdessen die richtige Richtlinie generieren. In meinem Fall war das so einfach wie der Versuch , sich mit derAuthorizedKeysCommand
Option einzuloggen/etc/ssh/sshd_config
und dann zu verwendenaudit2allow -a -M local && semodule -i local.pp
. Dies durchsucht im Wesentlichen die Überwachungsprotokolle und findet Dinge, die verhindert wurden, und generiert Ausnahmen für sie. Wenn Sie wahrscheinlich andere Dinge haben, die in die Whitelist aufgenommen werden, sollten Sie wahrscheinlich mehr darüber erfahrenaudit2allow
, um sicherzustellen, dass die neuen Richtlinien genau richtig sind.Es gibt andere (wahrscheinlich weniger getestete und vertrauenswürdige) Patches, die ähnliche Funktionen hinzufügen. Zum Beispiel gibt es openssh-script-auth . Sie können auch den Patch finden, den RedHat verwendet hat, und diesen direkt anwenden. Ein kurzer Kampf googeln deckt https://launchpadlibrarian.net/89063205/openssh-5.3p1-authorized-keys-command.patch und https://launchpadlibrarian.net/105938151/openssh-authorized-keys-command.patch welche basierend auf den RH-Versionen, die jedoch für neuere Versionen von OpenSSH aktualisiert wurden.
Patchen Sie OpenSSH, um Schlüsselsuchvorgänge direkt von einigen Stores aus durchzuführen (z. B. von GitHub und CodeBaseHQ und anderen). GitHub hat diesen Patch nach meinem besten Wissen nicht als Open-Source-Version bereitgestellt, aber ich weiß, dass ich in der Vergangenheit auf Versionen für MySQL- und PostgreSQL-Schlüsselsuche gestoßen bin. Ich habe gerade versucht, sie wiederzufinden, aber nicht viel Glück gehabt.
Es gibt auch einige FUSE-basierte Optionen. Zum Beispiel gibt es LPKFuse, mit dem Sie öffentliche Schlüssel aus LDAP bereitstellen können , indem Sie den
AuthorizedKeysFile
Speicherort auf einen im LPKFuse-Dateisystem ändern. Der LPKFuse FS erstellt virtuelle Dateien, deren Inhalt durch Felder von einem Verzeichnisserver gesichert wird.Alles in allem denke ich, dass Option 1 bei weitem die beste ist, da sie offiziell von RedHat unterstützt wird. Darüber hinaus können Sie jede beliebige Logik in das Skript einfügen (einschließlich der Kommunikation mit einer Datenbank), und zwar in jeder gewünschten Sprache.
quelle
OpenSSH hat diese Funktion meines Wissens nicht. Am besten lässt du die Datei nachts (oder so oft wie nötig) von einem Skript automatisch neu generieren.
Möglicherweise möchten Sie auch die folgende Frage sehen: Ein System zum Verteilen öffentlicher SSH-Schlüssel
quelle
Ich glaube, dass Sie in neueren openssh-Versionen Schlüssel in einem LDAP-Eintrag eines Benutzers speichern können. Wenn Sie LDAP oder AD bereits für die Kontoverwaltung verwenden, sollten Sie es auch für die Schlüsselverwaltung nutzen können.
quelle