Wie entferne ich einen SSH-Schlüssel?


152

Ich habe derzeit einen alten SSH-Schlüssel auf einen Server hochgeladen. Das Problem ist, dass ich mein ~/.sshVerzeichnis verloren habe (mit dem Original id_rsaund den id_rsa.pubDateien).

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

Geben Sie hier die Bildbeschreibung ein

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


Was ist mit ssh-add -d?
user2196728

5
Verdammt, es ist ssh-add -D, Großbuchstaben
Alexander Mills

Überprüfen Sie Ihre Sockets, die von Ihrem SSH-Agenten verwendet werden (1).
Dwight Spencer

Antworten:


128

Beachten Sie, dass es mindestens zwei Fehlerberichte gibt, um Schlüssel ssh-add -d/-D nicht zu entfernen:

Das genaue Problem ist:

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

Wenn Sie beispielsweise zwei verschiedene automatisch geladene SSH-Identitäten haben, die zwei verschiedenen GitHub-Konten zugeordnet sind - beispielsweise für die Arbeit und zu Hause -, können Sie nicht zwischen diesen wechseln. GitHub Nimmt den ersten, der übereinstimmt, sodass Sie für GitHub immer als "Heimanwender" angezeigt werden, ohne dass Sie Dinge in Arbeitsprojekte hochladen können.

Das Zulassen ssh-add -dder Anwendung auf automatisch geladene Schlüssel (und ssh-add -t Xdas Ändern der Lebensdauer automatisch geladener Schlüssel) würde das Verhalten wiederherstellen, das die meisten Benutzer erwarten.


Genauer gesagt zum Thema:

Der Schuldige ist gpg-keyring-daemon:

  • Es untergräbt den normalen Betrieb von ssh-agent, meistens nur, damit ein hübsches Feld angezeigt wird, in das Sie die Passphrase für einen verschlüsselten ssh-Schlüssel eingeben können.
  • Und es durchsucht Ihr .sshVerzeichnis und fügt Ihrem Agenten automatisch alle gefundenen Schlüssel hinzu.
  • Und Sie können diese Schlüssel nicht löschen.

Wie hassen wir das? Zählen wir nicht die Wege - 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-Agenten testen.
Wenn zu viele vorhanden sind, lehnt der Server die Verbindung ab.
Und da gnome-keyring-daemon selbst entschieden hat, wie viele Schlüssel Ihr SSH-Agent haben soll, und sie automatisch geladen hat und Sie sie nicht löschen lassen, 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:

  • Haben Sie ssh-add -Dalle Ihre löschen manuell hinzugefügt Tasten. Dies sperrt auch die automatisch hinzugefügten Schlüssel, ist jedoch nicht sehr nützlich, da gnome-keyringSie aufgefordert werden, sie trotzdem zu entsperren, wenn Sie versuchen, a git push.
  • Navigieren Sie zu Ihrem ~/.sshOrdner 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 git pushproblemlos auskommen können.

Eine weitere Problemumgehung:

Was Sie wirklich tun möchten, ist, gpg-keyring-daemonganz auszuschalten .
Gehen Sie zu System --> Preferences --> Startup Applicationsund deaktivieren Sie das SSH Key Agent (Gnome Keyring SSH Agent)Feld " ". Sie müssen nach unten scrollen, um es zu finden.

Sie erhalten immer noch eine ssh-agent, nur jetzt verhält es sich ordnungsgemäß: Keine Schlüssel werden 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 tun. Stell dir das vor.

Dieser Kommentar schlägt tatsächlich vor:

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


Ryan Lue fügt in den Kommentaren einen weiteren interessanten Eckfall hinzu :

Für den Fall, dass dies jemandem hilft: Ich habe sogar versucht, die Dateien id_rsaund id_rsa.pubinsgesamt zu löschen , und der Schlüssel wurde immer noch angezeigt.

Es stellte sich heraus, dass gpg-agentsie in einer ~/.gnupg/sshcontrolDatei zwischengespeichert wurden . Ich musste sie manuell von dort löschen.

Dies ist der Fall, wenn das keygripwie hier hinzugefügt wurde .


1
Eine weitere Option in Ubuntu 14-16 ist die Verwendung der GUI 'Passwörter und Schlüssel' (Sie können nach ssh suchen, um sie zu finden). Wählen Sie zB OpenSS-Schlüssel aus, klicken Sie mit der rechten Maustaste auf den Schlüssel und wählen Sie Löschen. Möglicherweise müssen Sie Ihr System neu starten, um festzustellen, ob es entfernt wurde.
user3257693

2
Warum ist diese Information über die ssh-agentund ssh-adddie ausgewählte Antwort? Das Originalplakat sagte, er will remove the old SSH key directly on the server and upload a new one. Das klingt so, als ob er ~/.ssh/authorized_keysauf dem Remote-Host bearbeiten möchte .
H2ONaCl

1
Diese Antwort hat mich dazu gebracht, ein Problem zu lösen, das bei aktivierter SSH-Weiterleitung auftritt. Beim Wechsel von einem Ubuntu 16.04-Computer zu einem Debian-System, auf dem alle SSH-Anmeldeinformationen weitergeleitet werden, git clonewurde der erste Schlüssel in der Kette anstelle der Version in der Konfigurationsdatei auf der Ubuntu-Box verwendet. Der schlechte Schlüssel wurde automatisch angesaugt und an die Debian-Box weitergeleitet.
Redfive

1
Dies ist ein echter Schmerz im Heck. Ich arbeite an Unternehmensprojekten und habe einen Vertrag mit einem anderen Unternehmen abgeschlossen. Dies verschwendet nur Zeitverschwendung bei der Verwaltung beider. Ich hoffe eine Lösung kommt bald!
Joshlsullivan

1
Für den Fall, dass dies jemandem hilft: Ich habe sogar versucht, die Dateien id_rsaund id_rsa.pubinsgesamt zu löschen , und der Schlüssel wurde immer noch angezeigt. Es stellte sich heraus, dass gpg-agent sie in einer ~/.gnupg/sshcontrolDatei zwischengespeichert hat. Ich musste sie manuell von dort löschen.
Ryan Lue

9

Sofern ich nicht falsch verstehe, haben Sie Ihr .sshVerzeichnis 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 eine schlüsselbasierte Anmeldung ermöglichte. In diesem Fall wird es in der .ssh/authorized_keysDatei 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 für den Zugriff auf den Server, und Sie haben eine andere Möglichkeit, sich anzumelden und die Datei zu bearbeiten. Sie können der authorised_keysDatei entweder manuell einen neuen öffentlichen Schlüssel hinzufügen oder verwenden ssh-copy-id. In beiden Fällen müssen Sie eine Kennwortauthentifizierung für Ihr Konto auf dem Server oder eine andere Identität oder Zugriffsmethode einrichten, um auf die authorized_keysDatei auf dem Server zuzugreifen .

ssh-addFügt Ihrem SSH-Agenten Identitäten hinzu, die die Verwaltung Ihrer Identitäten lokal übernehmen. "Die Verbindung zum Agenten wird über SSH-Remote-Anmeldungen weitergeleitet, und der Benutzer kann die von den Identitäten gewährten Berechtigungen an einer beliebigen Stelle im Netzwerk auf sichere Weise verwenden." (Manpage), also denke ich nicht, dass es das ist, was Sie in diesem Fall wollen. Soweit ich weiß, ist es 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.


Ich habe diese Datei gelöscht und kann immer noch eine Verbindung herstellen. Also war es hier definitiv nicht enthalten ... Es war ein automatisch hinzugefügter Schlüssel, existiert aber immer noch nirgendwo.
Larry

9

Wenn Sie versuchen, eine ssh-bezogene Operation auszuführen und die folgende Fehlermeldung erhalten:

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

Sie können den fehlenden SSH-Schlüssel wie folgt von Ihrem SSH-Agenten entfernen:

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

5

Ich habe die Anwendung "Passwörter und Schlüssel" in meiner Unity geöffnet und unerwünschte Schlüssel von Secure Keys -> OpenSSH-Schlüsseln entfernt . Sie wurden automatisch auch von ssh-agent -l entfernt .


2
Beachten Sie, dass dies sie auch aus dem Verzeichnis löscht~/.ssh
Peter V. Mørch

1

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

  • Klicken Sie oben links auf die Registerkarte Aktivitäten
  • Geben Sie im daraufhin angezeigten Suchfeld "Startanwendungen" ein.
  • Klicken Sie auf das Symbol "Startanwendungen"
  • Wählen Sie in dem daraufhin angezeigten Feld die Gnome-Schlüsselring-Manager-Anwendung aus (Sie können sich den genauen Namen auf der GUI nicht merken, er ist jedoch deutlich genug) und entfernen Sie ihn.

Als nächstes versuchte ich es ssh-add -Derneut und ssh-add -lsagte mir nach dem Neustart , dass der Agent keine Identität hat. Ich habe bestätigt, dass der ssh-agentDaemon noch läuft ps aux | grep agent. Also habe ich den Schlüssel hinzugefügt, den ich am häufigsten mit GitHub ( ssh-add ~/.ssh/id_ecdsa) benutze 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, reserviere ich nur ein Terminal dafür export GIT_SSH_COMMAND="ssh -i /home/me/.ssh/id_rsa.pub". Gelöst! Dank geht an @VonC, um auf den Fehler und die Lösung hinzuweisen.


1

Überprüfen Sie die SSH-Taste oder nicht in Ihrem System

  1. Gehen Sie zu Ordner -> /Users/administrator/.ssh/id_ed25519.pub

Wenn nicht als

  1. Terminal öffnen.

Vorbei im Terminal

  1. Überprüfen Sie Benutzer -> ssh -T git@gitlab.com

Entfernen Sie den vorhandenen .ssh-Schlüssel

  1. Entfernen Sie den vorhandenen .ssh-Schlüssel -> rm ~ / .ssh / github_rsa.pub

Erstelle neu

  1. Neuen .ssh-Schlüssel erstellen -> ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

  2. Der öffentliche Schlüssel wurde in "/Users/administrator/.ssh/id_ed25519.pub" gespeichert.

  3. Öffnen Sie den gespeicherten Pfad des öffentlichen Schlüssels.
  4. Kopieren Sie den .ssh-Schlüssel -> GitLab-Konto -> Einstellungen -> SSH-Schlüssel -> Schlüssel hinzufügen
  5. Testen Sie erneut vom Terminal -> ssh -T git@gitlab.com

0

Die Lösung für mich (OpenSuse Leap 42.3, KDE) bestand darin, den Ordner umzubenennen, der ~/.gnupganscheinend die zwischengespeicherten Schlüssel und Profile enthielt. Nach dem Abmelden / Anmelden von KDE wird ssh-add / agent erneut ausgeführt und der Ordner wird von Grund auf neu erstellt, aber die alten Schlüssel sind alle weg.

Ich hatte keinen Erfolg mit den anderen Ansätzen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.