key_load_public: Ungültiges Format

Lesezeit: 10 Minuten

Ich habe PuTTY Key Generator verwendet, um einen 4096-Bit-RSA-2-Schlüssel mit einer Passphrase zu generieren.

Ich speichere die .ppk-Datei und einen öffentlichen Schlüssel im OpenSSL-Format. Der öffentliche Schlüssel im Putty-Format funktioniert nicht.

Mein Fehler ist jedenfalls folgender:

$ ssh -T [email protected]
key_load_public: invalid format
Enter passphrase for key '/c/Users/Dan/.ssh/id_rsa':
Hi Dan! You've successfully authenticated, but GitHub does not provide shell access.

Was ist das Problem?

Ich benutze Pageant, um die Schlüssel zu laden, und ich benutze Git Bash, um die SSH-Verbindung zu versuchen. Ich habe auch den Schlüssel in GitHub geladen, nicht sicher, was ich falsch mache.

Ich habe versucht, eine neue Zeile hinzuzufügen und keine neue Zeile in GitHub hinzuzufügen

  • Warum denkst du, dass es nicht funktioniert? Es sagt erfolgreich authentifiziert.

    – Roland Schmidt

    17. März 17 um 17:41 Uhr

  • @RolandSmith Es sagt mir key_load_public: invalid format Richtig, wenn ich den Befehl ausführe, bevor ich die Passphrase eingebe?

    – JordanGS

    17. März 17 um 17:42 Uhr

  • Führen Sie Folgendes aus: ‘ssh -vvv -T [email protected]’, um weitere Informationen zu erhalten, wahrscheinlich ist ~/.ssh/known_hosts schlecht – ssh sucht nach dem öffentlichen Schlüssel von github. Sie können ‘file key’ ausführen, um das Format der Schlüsseldatei herauszufinden.

    – mosch

    17. November 17 um 14:40 Uhr

key load public Ungultiges Format
Samthecodingman

Wie Roland in ihrer Antwort erwähnte, ist es eine Warnung, dass die ssh-agent versteht das Format des öffentlichen Schlüssels nicht und selbst dann wird der öffentliche Schlüssel nicht lokal verwendet.

Ich kann jedoch auch erläutern und beantworten, warum die Warnung dort ist. Es läuft einfach darauf hinaus, dass die PuTTY-Schlüsselgenerator erzeugt zwei verschiedene öffentliche Schlüsselformate je nachdem, was Sie im Programm tun.

Notiz: In meiner Erklärung werden die Schlüsseldateien, die ich verwenden/generieren werde, benannt id_rsa mit entsprechenden Erweiterungen. Darüber hinaus wird zum bequemen Kopieren und Einfügen angenommen, dass der übergeordnete Ordner der Schlüssel derselbe ist ~/.ssh/. Passen Sie diese Details Ihren Wünschen entsprechend an.

Die Formate

Link zur relevanten PuTTY-Dokumentation

SSH-2

Wenn du speichern ein Schlüssel mit der PuTTY-Schlüsselgenerator über die Schaltfläche „Öffentlichen Schlüssel speichern“ wird er in dem von definierten Format gespeichert RFC 4716.

Beispiel:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "github-example-key"
AAAAB3NzaC1yc2EAAAABJQAAAQEAhl/CNy9wI1GVdiHAJQV0CkHnMEqW7+Si9WYF
i2fSBrsGcmqeb5EwgnhmTcPgtM5ptGBjUZR84nxjZ8SPmnLDiDyHDPIsmwLBHxcp
pY0fhRSGtWL5fT8DGm9EfXaO1QN8c31VU/IkD8niWA6NmHNE1qEqpph3DznVzIm3
oMrongEjGw7sDP48ZTZp2saYVAKEEuGC1YYcQ1g20yESzo7aP70ZeHmQqI9nTyEA
ip3mL20+qHNsHfW8hJAchaUN8CwNQABJaOozYijiIUgdbtSTMRDYPi7fjhgB3bA9
tBjh7cOyuU/c4M4D6o2mAVYdLAWMBkSoLG8Oel6TCcfpO/nElw==
---- END SSH2 PUBLIC KEY ----

OpenSSH

Entgegen der landläufigen Meinung wird dieses Format nicht vom Generator gespeichert. Er wird jedoch generiert und im Textfeld mit dem Titel „Öffentlicher Schlüssel zum Einfügen in die Datei „authorized_keys“ von OpenSSH“ angezeigt. Um es als Datei zu speichern, müssen Sie es manuell aus dem Textfeld kopieren und in eine neue Textdatei einfügen.

Für den oben gezeigten Schlüssel wäre dies:

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAhl/CNy9wI1GVdiHAJQV0CkHnMEqW7+Si9WYFi2fSBrsGcmqeb5EwgnhmTcPgtM5ptGBjUZR84nxjZ8SPmnLDiDyHDPIsmwLBHxcppY0fhRSGtWL5fT8DGm9EfXaO1QN8c31VU/IkD8niWA6NmHNE1qEqpph3DznVzIm3oMrongEjGw7sDP48ZTZp2saYVAKEEuGC1YYcQ1g20yESzo7aP70ZeHmQqI9nTyEAip3mL20+qHNsHfW8hJAchaUN8CwNQABJaOozYijiIUgdbtSTMRDYPi7fjhgB3bA9tBjh7cOyuU/c4M4D6o2mAVYdLAWMBkSoLG8Oel6TCcfpO/nElw== github-example-key

Das Format des Schlüssels ist einfach ssh-rsa <signature> <comment> und kann durch Neuanordnung der SSH-2-formatierten Datei erstellt werden.

Regenerieren öffentlicher Schlüssel

Wenn Sie Gebrauch machen ssh-agent, auf die Sie wahrscheinlich auch Zugriff haben werden ssh-keygen.

Wenn Sie Ihren privaten OpenSSH-Schlüssel (id_rsa Datei), können Sie die öffentliche OpenSSH-Schlüsseldatei generieren mit:

ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pub

Wenn Sie nur den PUTTY Private Key haben (id_rsa.ppk Datei), müssen Sie diese zuerst konvertieren.

  1. Öffne das PuTTY-Schlüsselgenerator
  2. Klicken Sie in der Menüleiste auf „Datei“ > „Privaten Schlüssel laden“
  3. Wähle Deine id_rsa.ppk Datei
  4. Klicken Sie in der Menüleiste auf „Konvertierungen“ > „OpenSSH-Schlüssel exportieren“
  5. Speichern Sie die Datei unter id_rsa (ohne Erweiterung)

Nachdem Sie nun einen privaten OpenSSH-Schlüssel haben, können Sie den verwenden ssh-keygen Werkzeug wie oben, um Manipulationen am Schlüssel durchzuführen.

Bonus: Das PKCS#1 PEM-kodierte Public-Key-Format

Um ehrlich zu sein, weiß ich nicht, wofür dieser Schlüssel verwendet wird, da ich ihn nicht benötigt habe. Aber ich habe es in meinen Notizen, die ich im Laufe der Jahre zusammengetragen habe, und ich werde es hier der heilsamen Güte wegen hinzufügen. Die Datei wird wie folgt aussehen:

-----BEGIN RSA PUBLIC KEY-----
MIIBCAKCAQEAhl/CNy9wI1GVdiHAJQV0CkHnMEqW7+Si9WYFi2fSBrsGcmqeb5Ew
gnhmTcPgtM5ptGBjUZR84nxjZ8SPmnLDiDyHDPIsmwLBHxcppY0fhRSGtWL5fT8D
Gm9EfXaO1QN8c31VU/IkD8niWA6NmHNE1qEqpph3DznVzIm3oMrongEjGw7sDP48
ZTZp2saYVAKEEuGC1YYcQ1g20yESzo7aP70ZeHmQqI9nTyEAip3mL20+qHNsHfW8
hJAchaUN8CwNQABJaOozYijiIUgdbtSTMRDYPi7fjhgB3bA9tBjh7cOyuU/c4M4D
6o2mAVYdLAWMBkSoLG8Oel6TCcfpO/nElwIBJQ==
-----END RSA PUBLIC KEY-----

Diese Datei kann mithilfe eines privaten OpenSSH-Schlüssels (wie oben unter „Erneuern öffentlicher Schlüssel“ generiert) generiert werden:

ssh-keygen -f ~/.ssh/id_rsa -y -e -m pem > ~/.ssh/id_rsa.pem

Alternativ können Sie einen öffentlichen OpenSSH-Schlüssel verwenden:

ssh-keygen -f ~/.ssh/id_rsa.pub -e -m pem > ~/.ssh/id_rsa.pem

##Verweise:##

  • Wenn Sie Ihren privaten Schlüssel in einen OpenSSH-Schlüssel konvertieren, ist es meiner Meinung nach empfehlenswert, die Datei ohne Erweiterung zu lassen und nicht vorzuziehen. Mein Git-Client stellt keine Verbindung zum Remote-Repository her, wenn eine Erweiterung für den privaten Schlüssel verwendet wird.

    – Programmierer1994

    30. September 18 um 22:41 Uhr


  • @Programmer1994 Die Konvertierungsanweisungen wurden als Schritte zum Konvertieren der .ppk zu einem .pub Datei. Die Nebenwirkung des Vermittlers id_rsa privater Schlüssel, der tatsächlich von einem anderen Programm verwendet wird, wurde übersehen. Ich habe die Sprache “vorzugsweise ohne Erweiterung” in “(ohne Erweiterung)” geändert, um Unklarheiten zu beseitigen. Ich habe auch die Gelegenheit genutzt, einige Beschwerden neu zu formulieren, die auftauchen, wenn ich auf diese Antwort zurückblicke. Danke für Ihren Beitrag.

    – samthecodingman

    1. Oktober 18 um 5:53 Uhr

  • Danke für die Antwort. Ich habe den Befehl im Abschnitt Ihrer Antwort “Regenerating Public Keys” verwendet und mein Problem gelöst.

    – desmond13

    28. März 19 um 9:44 Uhr


  • ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pub das hat es gelöst. VIELEN DANK!

    – Dwza

    18. Juli 19 um 21:38 Uhr

  • sehr hilfe, du sparst meine stunden… 😀 Folge Regenerating Public Keys, und bringt mir Arbeit.

    – yasriady

    27. Februar 21 um 1:29 Uhr

Es gibt eine einfache Lösung, wenn Sie das Puttygen-Tool installieren und verwenden können. Unten sind die Schritte. Sie sollten die Passphrase des privaten Schlüssels haben.

Schritt 1: Neueste herunterladen putzig und offene Puttygen

Schritt 2: Laden Sie Ihre vorhandene private Schlüsseldatei, siehe Bild unten

Laden Sie einen vorhandenen privaten Schlüssel

Schritt 3: Geben Sie die Passphrase für den Schlüssel ein, wenn Sie dazu aufgefordert werden, und klicken Sie auf OK

Geben Sie die Paasphrase ein

Schritt 4: wie in der Abbildung unten gezeigt, wählen Sie den Menüreiter „Konvertierung“ und wählen Sie „OpenSSH-Schlüssel exportieren“

OpenSSH-Datei speichern

Speichern Sie die neue private Schlüsseldatei an einem bevorzugten Ort und verwenden Sie sie entsprechend.

  • ich habe das load pubkey invalid format Warnung, wenn ich den Schlüssel mit exportiert habe OpenSSH-Schlüssel exportieren. Beim Benutzen war es weg OpenSSH-Schlüssel exportieren (neues Dateiformat erzwingen).

    – Elsamuko

    27. Juli 2020 um 6:51 Uhr


  • Unter Linux, apt install putty-tools oder yum install putty dann sudo puttygen private.ppk -O private-openssh-new -o private.pem

    – Typl

    11. November 20 um 21:01 Uhr

TL;DR: Stellen Sie außerdem sicher, dass Ihre id_rsa.pub ist in ASCII / UTF-8.

Ich hatte das gleiche Problem, aber die akzeptierte Antwort allein funktionierte wegen der Textcodierung nicht, was ein zusätzliches, leicht zu übersehendes Problem war.

Wenn ich laufe

ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pub

in Windows PowerShell speichert es die Ausgabe in id_rsa.pub in UTF-16 LE BOM Codierung, nicht in UTF-8. Dies ist eine Eigenschaft einiger Installationen von PowerShell, die unter Verwenden von PowerShell zum Schreiben einer Datei in UTF-8 ohne das BOM erläutert wurde. Anscheinend erkennt OpenSSH die frühere Textcodierung nicht und erzeugt einen identischen Fehler:

key_load_public: invalid format

Kopieren und Einfügen der Ausgabe von ssh-keygen -f ~/.ssh/id_rsa -y in einen Texteditor ist der einfachste Weg, dies zu lösen.

PS Dies könnte eine Ergänzung zur akzeptierten Antwort sein, aber ich habe noch nicht genug Karma, um hier einen Kommentar abzugeben.

  • Wie Sie festgestellt haben, funktioniert das Piping in Powershell anders. Du würdest verwenden ssh-keygen -f ~/.ssh/id_rsa -y | ac ~/.ssh/id_rsa.pub stattdessen.

    – samthecodingman

    15. September 2020 um 12:54 Uhr

Falls Sie Ihren öffentlichen Schlüssel mit der Zwischenablage kopieren und einfügen, kann es vorkommen, dass die Zeichenfolge des öffentlichen Schlüssels beschädigt wird, die Zeilenumbrüche enthält.

Stellen Sie sicher, dass die Zeichenfolge Ihres öffentlichen Schlüssels aus einer Zeile besteht.

Es scheint, dass ssh kann Ihren öffentlichen Schlüssel nicht lesen. Aber das spielt keine Rolle.

Du lädst deine hoch Öffentlicher Schlüssel zu github, aber Sie authentifizieren sich mit Ihrer Privat Schlüssel. Siehe zB Abschnitt DATEIEN in ssh(1).

  • Kurz gesagt, gehen Sie zu putty key gen, klicken Sie auf Conversions -> open ssh key und speichern Sie das in id_rsa – stellen Sie sicher, dass Ihre HOME-env-Variable auf den .ssh-Ordner zeigt, den Sie sich ansehen, löschen Sie alle anderen Kopien der id_rsa-Datei von Ihrem System

    – Kalpesh Soni

    3. August 18 um 22:17 Uhr

  • Diese Antwort ist die Lösung für mich. Siehe die gleiche Antwort unter ssh key_load_public: Warnung vor ungültigem Format. Sie sollten den öffentlichen Schlüssel auf dem Client umbenennen oder entfernen, da er auf dem Client sowieso nicht benötigt wird und anscheinend als privater Schlüssel geprüft wird, da er gleich heißt (nur mit der Erweiterung “.pub”).

    – Frage an42

    13. März 21 um 14:16 Uhr


Der Fehler ist irreführend – es heißt “pubkey“, während Sie auf eine private Schlüsseldatei zeigen ~/.ssh/id_rsa.

In meinem Fall war es einfach ein fehlender öffentlicher Schlüssel (da ich ihn nicht aus einem Tresor wiederhergestellt habe).


EINZELHEITEN

Früher habe ich das Deployment übersprungen ~/.ssh/id_rsa.pub durch automatisierte Skripte.

Alle ssh Verwendungen funktionierten, aber der Fehler ließ mich an ein mögliches Durcheinander denken.

Keineswegs – strace half zu bemerken, dass der Auslöser tatsächlich der war *.pub Datei:

strace ssh example.com
...
openat(AT_FDCWD, "/home/uvsmtid/.ssh/id_rsa.pub", O_RDONLY) = -1 ENOENT (No such file or directory)
...
write(2, "load pubkey "/home/uvsmtid/.ssh/"..., 57) = 57
load pubkey "/home/uvsmtid/.ssh/id_rsa": invalid format

  • Kurz gesagt, gehen Sie zu putty key gen, klicken Sie auf Conversions -> open ssh key und speichern Sie das in id_rsa – stellen Sie sicher, dass Ihre HOME-env-Variable auf den .ssh-Ordner zeigt, den Sie sich ansehen, löschen Sie alle anderen Kopien der id_rsa-Datei von Ihrem System

    – Kalpesh Soni

    3. August 18 um 22:17 Uhr

  • Diese Antwort ist die Lösung für mich. Siehe die gleiche Antwort unter ssh key_load_public: Warnung vor ungültigem Format. Sie sollten den öffentlichen Schlüssel auf dem Client umbenennen oder entfernen, da er auf dem Client sowieso nicht benötigt wird und anscheinend als privater Schlüssel geprüft wird, da er gleich heißt (nur mit der Erweiterung “.pub”).

    – Frage an42

    13. März 21 um 14:16 Uhr


1642313782 515 key load public Ungultiges Format
Jignesh Rawal

Anstatt den privaten Schlüssel direkt zu speichern, gehen Sie zu Konvertierungen und exportieren Sie den SSh-Schlüssel. Hatte das gleiche Problem und das hat bei mir funktioniert

.

501770cookie-checkkey_load_public: Ungültiges Format

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy