it-swarm.com.de

So entfernen Sie einen SSH-Schlüssel?

Ich habe derzeit einen alten SSH-Schlüssel auf den Server hochgeladen. Das Problem ist, dass ich mein ~/.ssh - Verzeichnis verloren habe (mit den Originaldateien id_rsa Und id_rsa.pub).

Folglich möchte ich den alten SSH-Schlüssel direkt auf dem Server entfernen und einen neuen hochladen.

Ich habe den folgenden Befehl ohne Erfolg versucht:

$> ssh-add -D

enter image description here

Gibt es eine Möglichkeit, einen SSH-Schlüssel vollständig zu entfernen?

113
user1364743

Beachten Sie, dass es mindestens zwei Fehlerberichte gibt, wenn ssh-add -d/-D keine Schlüssel entfernt :

Das genaue Problem ist:

ssh-add -d/-D Löscht nur manuell hinzugefügte Schlüssel vom Gnomenschlüsselbund.
Es gibt keine Möglichkeit, automatisch hinzugefügte Schlüssel zu löschen.
Dies ist der ursprüngliche Fehler, und er ist definitiv immer noch vorhanden.

Wenn Sie beispielsweise zwei verschiedene automatisch geladene SSH-Identitäten haben, die mit zwei verschiedenen GitHub-Konten verknüpft sind - etwa für die Arbeit und für zu Hause -, gibt es keine Möglichkeit um zwischen ihnen zu wechseln. GitHub nimmt den ersten, der passt, so dass Sie GitHub immer als "Heimanwender" angezeigt werden und keine Möglichkeit haben, Dinge in Arbeitsprojekte hochzuladen.

Zulassen, dass ssh-add -d Auf automatisch geladene Schlüssel angewendet wird (und ssh-add -t X, Um die Lebensdauer automatisch geladener Schlüssel zu ändern) würde das Verhalten, das die meisten Benutzer erwarten, wiederherstellen.


Genauer gesagt zum Thema:

Der Täter ist gpg-keyring-daemon:

  • Es untergräbt den normalen Betrieb von ssh-agent, meistens nur, um eine hübsche Box aufzurufen, in die Sie die Passphrase für einen verschlüsselten ssh-Schlüssel eingeben können.
  • Und es durchsucht Ihr .ssh - Verzeichnis und fügt automatisch alle gefundenen Schlüssel Ihrem Agenten hinzu.
  • Und Sie können diese Schlüssel nicht löschen.

Wie hassen wir das? Lasst uns die Wege nicht zählen - das Leben ist zu kurz.

Der Fehler wird noch verstärkt, da neuere ssh-Clients beim Herstellen einer Verbindung zu einem Host automatisch alle Schlüssel in Ihrem ssh-agent testen.
Wenn zu viele vorhanden sind, lehnt der Server die Verbindung ab.
Und da gnome-keyring-daemon selbst festgelegt hat, wie viele Schlüssel Ihr ssh-agent haben soll, und sie automatisch geladen hat, und Sie sie nicht löschen dürfen, stoßen Sie an.

Dieser Fehler wurde in Ubuntu 14.04.4 noch vor zwei Tagen (21. August 2014) bestätigt.


Eine mögliche Problemumgehung:

  • Führen Sie ssh-add -D Aus, um alle von Ihnen manuell hinzugefügten Schlüssel zu löschen. Dies sperrt auch die automatisch hinzugefügten Schlüssel, ist aber nicht sehr nützlich, da gnome-keyring Sie auffordert, diese zu entsperren, wenn Sie versuchen, einen git Push Zu erstellen.
  • Navigieren Sie zu Ihrem Ordner ~/.ssh Und verschieben Sie alle Schlüsseldateien mit Ausnahme derjenigen, mit der Sie sich identifizieren möchten, in einen separaten Ordner namens backup. Bei Bedarf können Sie auch Seepferdchen öffnen und die Schlüssel von dort löschen.
  • Jetzt sollten Sie problemlos git Push Ausführen können.

Eine andere Problemumgehung:

Was Sie wirklich tun möchten, ist, gpg-keyring-daemon Vollständig auszuschalten.
Gehen Sie zu System --> Preferences --> Startup Applications Und deaktivieren Sie das Kontrollkästchen "SSH Key Agent (Gnome Keyring SSH Agent)" - Sie müssen nach unten scrollen, um es zu finden.

Sie erhalten weiterhin ein ssh-agent, Nur dass es sich jetzt normal verhält: Es werden keine Schlüssel automatisch geladen, Sie führen ssh-add aus, um sie hinzuzufügen, und wenn Sie Schlüssel löschen möchten, können Sie dies. Stell dir das vor.

Dieser Kommentar schlägt tatsächlich vor:

Die Lösung besteht darin, zu verhindern, dass gnome-keyring-manager Jemals gestartet wird, was seltsamerweise schwierig war, indem schließlich die Ausführungsberechtigung der Programmdatei entfernt wurde.

101
VonC

Wenn Sie versuchen, eine ssh-bezogene Operation auszuführen und den folgenden Fehler erhalten:

$ git fetch
no such identity: <ssh key path>: No such file or directory

Sie können den fehlenden SSH-Schlüssel folgendermaßen von Ihrem SSH-Agenten entfernen:

$ eval `ssh-agent -s`  # start ssh agent
$ ssh-add -D <ssh key path>  # delete ssh key
7
Derek Soike

Sofern ich nichts falsches verstehe, haben Sie Ihr .ssh - Verzeichnis mit Ihrem privaten Schlüssel auf Ihrem lokalen Computer verloren und möchten daher den öffentlichen Schlüssel entfernen, der sich auf einem Server befand und der eine schlüsselbasierte Anmeldung ermöglichte. In diesem Fall wird es in der Datei .ssh/authorized_keys In Ihrem Home-Verzeichnis auf dem Server gespeichert. Sie können diese Datei einfach mit einem Texteditor bearbeiten und die entsprechende Zeile löschen, wenn Sie sie identifizieren können (noch einfacher, wenn es der einzige Eintrag ist!). Ich hoffe, dieser Schlüssel war nicht Ihre einzige Methode, um auf den Server zuzugreifen, und Sie haben eine andere Möglichkeit, sich anzumelden und die Datei zu bearbeiten. Sie können entweder manuell einen neuen öffentlichen Schlüssel zur Datei authorised_keys Hinzufügen oder ssh-copy-id Verwenden. In beiden Fällen müssen Sie die Kennwortauthentifizierung für Ihr Konto auf dem Server oder eine andere Identitäts- oder Zugriffsmethode einrichten, um zur Datei authorized_keys Auf dem Server zu gelangen.

ssh-add Fügt Ihrem ssh-Agenten Identitäten hinzu, die die lokale Verwaltung Ihrer Identitäten übernehmen. "Die Verbindung zum Agenten wird über SSH-Remoteanmeldungen weitergeleitet, und der Benutzer kann somit die durch die Identitäten gewährten Berechtigungen an einer beliebigen Stelle im Netzwerk verwenden ein sicherer Weg. " (Manpage), also denke ich nicht, dass es das ist, was Sie in diesem Fall wollen. Es ist meines Wissens nicht möglich, Ihren öffentlichen Schlüssel auf einen Server zu übertragen, ohne dass Sie über ein SSH-Login auf diesen Server zugreifen können.

6
Tim

Ich habe die Anwendung "Passwörter und Schlüssel" in meiner Unity geöffnet und unerwünschte Schlüssel aus sicheren Schlüsseln entfernt -> OpenSSH-Schlüssel Und sie wurden automatisch auch aus ssh-agent -l entfernt.

4
Anton Balashov

Ich kann bestätigen, dass dieser Fehler in Ubuntu 19.04 noch vorhanden ist. Die von @VonC vorgeschlagene Problemumgehung hat einwandfrei funktioniert und für meine Version zusammengefasst:

  • Klicken Sie oben links auf die Registerkarte Aktivitäten
  • Beginnen Sie im angezeigten Suchfeld mit der Eingabe von "Startanwendungen".
  • Klicken Sie auf das Symbol "Startup Applications"
  • Wählen Sie in dem daraufhin angezeigten Feld die Anwendung "Gnome-Schlüsselring-Manager" aus (ich kann mich nicht an den genauen Namen auf der Benutzeroberfläche erinnern, aber er ist deutlich genug) und entfernen Sie sie.

Als nächstes habe ich versucht, ssh-add -D Erneut auszuführen, und nach dem Neustart hat mir ssh-add -l Folgendes mitgeteilt: Der Agent hat keine Identitäten. Ich habe bestätigt, dass ich immer noch den ssh-agent Daemon läuft mit ps aux | grep agent. Also habe ich den Schlüssel hinzugefügt, den ich am häufigsten mit GitHub verwende (ssh-add ~/.ssh/id_ecdsa) Und alles ist gut!

Jetzt kann ich die normalen Vorgänge mit meinem am häufigsten verwendeten Repository ausführen. Wenn ich gelegentlich Zugriff auf das andere Repository benötige, das den RSA-Schlüssel verwendet, habe ich nur ein Terminal mit export GIT_SSH_COMMAND="ssh -i /home/me/.ssh/id_rsa.pub" Dafür reserviert. Gelöst! Wir danken @VonC für den Hinweis auf den Fehler und die Lösung.

1
Nagev