Benutzer A verfügt über zwei private SSH-Schlüssel und hat diesen öffentlichen Schlüssel im Laufe der Zeit auf mehreren Servern verwendet. Er hat einen davon verloren und ein neues Paar erstellt.
Wie informiert mich Benutzer A (der Systemadministrator), dass er seinen Schlüssel verloren hat, und wie verwalte ich alle Server, auf die er Zugriff hatte (ich habe keine Liste aller Server, auf die Benutzer A Zugriff hat). Mit anderen Worten, wie kann ich den öffentlichen Schlüssel abrufen, der diesem privaten Schlüssel zugeordnet ist?
Bei der LDAP-basierten Authentifizierung kommunizieren alle Server zur Authentifizierung mit einem einzelnen Server-Repository. Wenn ich den Zugriff auf das Server entferne oder das Kennwort auf dem Server ändere, sind alle Systeme, die dieses LDAP zur Authentifizierung verwenden, gesichert, wenn Benutzer A sein Kennwort verliert.
Antworten:
Welche Version von sshd verwenden Sie? OpenSSH 5.4 hat anscheinend eine Schlüsselwiderrufsoption:
Wenn Sie eine frühere Version verwenden, müssen Sie wahrscheinlich alle möglichen autorisierten Schlüsseldateien auf allen Ihren Servern durchlaufen, um den verdächtigen öffentlichen Schlüssel zu suchen und zu entfernen. Dies würde jedes Konto einschließen, in das Benutzer-A ssh könnte, einschließlich root. Dies setzt voraus, dass Sie keine zentralisierte authoried_key-Verwaltung verwenden.
quelle
Eine mögliche kurzfristige Lösung für diese Situation ist die Verwendung eines Konfigurationsverwaltungstools ( Ansible kann hier eine gute Wahl sein).
Sie können insbesondere das
authorized_key
Modul ( https://docs.ansible.com/ansible/authorized_key_module.html ) verwenden, um einen (oder mehrere) bestimmte Fingerabdrücke des öffentlichen Schlüssels aus der Datei "authorized_key" eines bestimmten Benutzers zu entfernen.Ein Beispiel fehlt für Ihre Bedürfnisse, aber so etwas könnte funktionieren:
Sie können auch (zumindest in ansible) einen Befehl ausführen, um eine Liste aller Benutzer auf einem System zu erstellen, indem Sie / etc / passwd abfragen.
Sie können auch einfach eine neue Whitelist mit Schlüsseln erstellen und alles andere entfernen, aber das ist in Ihrer Situation möglicherweise nicht praktikabel.
Die ansible Dokumente geben ein grobes Beispiel dafür, wie das funktionieren könnte:
Auf lange Sicht möchten Sie vielleicht über Jumphosts nachdenken - ich habe festgestellt, dass Teleport ziemlich gut ist.
quelle
Sowohl in OpenSSH als auch in Putty können Sie den öffentlichen Schlüssel vom privaten Schlüssel neu generieren, aber nicht umgekehrt.
Verwenden Sie den Dateinamen ssh-keygen -y -f
Importieren Sie in PuttyGen den Schlüssel und es wird Ihnen der öffentliche Schlüssel angezeigt.
quelle
grep
in den verschiedenenssh
Verzeichnissen für eine Folge von beispielsweise 12 Zeichen.) Die Frage lautet: "Mit anderen Worten, wie erinnere ich mich an den öffentlichen Schlüssel, der diesem privaten Schlüssel zugeordnet ist." und der erste Schritt dabei besteht darin, herauszufinden, was dieser öffentliche Schlüssel ist, damit Sie danach suchen können.Wenn dies ein Benutzerschlüssel ist (wie es scheint), befindet er sich in der
authorized_keys
Datei für Benutzer-IDs, auf die der Benutzer Zugriff hatte. Sie müssen das Unterverzeichnis .ssh der Home-Verzeichnisse durchsuchen. (Wenn Sie Home-Verzeichnisse automatisch bereitgestellt haben, müssen Sie nur das Verzeichnis auf einem Server durchsuchen. Andernfalls müssen Sie alle Server durchsuchen, auf die sie möglicherweise Zugriff hatten.)Das Problem besteht darin, die erste Kopie des alten Schlüssels zu finden. Das Home-Verzeichnis des Benutzers auf Systemen, auf die häufig zugegriffen wird, ist ein guter Ausgangspunkt. Sobald Sie den Schlüssel haben, können Sie ihn auf anderen Systemen und Benutzer-IDs abrufen. Wenn Sie eher nach dem Schlüsselwert als nach dem Kommentar suchen, werden mit größerer Wahrscheinlichkeit alle Schlüssel gefunden.
quelle
Während das Widerrufen von SSH-Schlüsseln sicherlich keine schlechte Idee ist, besteht die bessere (oder skalierbarere) Lösung darin, MFA (Multi-Faktor-Authentifikator, auch bekannt als Zwei-Faktor-Authentifizierung) zu implementieren. Dies hat zur Folge, dass der Schlüssel abgewertet wird, da sich der Benutzer nur anmelden kann, wenn er (1) zusätzlichen Faktor erfüllt.
Es gibt einige Open Source-Lösungen wie Google Authenticator und Oath. Dann eine hybride Open Source / kommerzielle Lösung wie Duo. Mit Duo können Sie sogar Geo-Zaun-Logins und Push-Benachrichtigungen erstellen.
Für eine 100% funktionsfähige Beispielimplementierung überprüfen Sie diese Bastion, die als Docker-Container implementiert ist: https://github.com/cloudposse/bastion
quelle