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 Kittformat funktioniert nicht.
In jedem Fall lautet mein Fehler wie folgt:
$ 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 den Schlüssel auch in GitHub geladen und bin mir nicht sicher, was ich falsch mache.
Ich habe versucht, eine neue Zeile hinzuzufügen und keine neue Zeile in GitHub hinzuzufügen
git
github
ssh
public-key
JordanGS
quelle
quelle
key_load_public: invalid format
richtig, wie ich den Befehl ausführe, bevor ich die Passphrase eingebe?Antworten:
Wie Roland in seiner Antwort erwähnt hat, ist es eine Warnung, dass das
ssh-agent
Format des öffentlichen Schlüssels nicht verstanden wird und der öffentliche Schlüssel selbst dann nicht lokal verwendet wird.Ich kann jedoch auch erläutern und beantworten, warum die Warnung vorhanden ist. Es läuft einfach darauf hinaus, dass der PuTTY-Schlüsselgenerator zwei verschiedene öffentliche Schlüsselformate generiert , je nachdem, was Sie im Programm tun.
Hinweis: Während meiner Erläuterung werden die Schlüsseldateien, die ich verwenden / generieren werde,
id_rsa
mit den entsprechenden Erweiterungen benannt. Zum besseren Kopieren und Einfügen wird außerdem der übergeordnete Ordner der Schlüssel angenommen~/.ssh/
. Passen Sie diese Details an Ihre Bedürfnisse an.Die Formate
Link zur entsprechenden PuTTY-Dokumentation
SSH-2
Wenn Sie speichern eine Taste mit dem PuTTY Key Generator „Speichern öffentlicher Schlüssel“ Taste, wird es in der durch definierte Format gespeichert werden RFC 4716 .
Beispiel:
OpenSSH
Entgegen der landläufigen Meinung wird dieses Format vom Generator nicht gespeichert. Es wird jedoch generiert und im Textfeld "Öffentlicher Schlüssel zum Einfügen in die OpenSSH-Datei" authorized_keys "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:
Das Format des Schlüssels ist einfach
ssh-rsa <signature> <comment>
und kann durch Neuanordnen der SSH-2-formatierten Datei erstellt werden.Öffentliche Schlüssel regenerieren
Wenn Sie davon Gebrauch machen
ssh-agent
, haben Sie wahrscheinlich auch Zugriff aufssh-keygen
.Wenn Sie über Ihren privaten OpenSSH-Schlüssel (
id_rsa
Datei) verfügen , können Sie die öffentliche OpenSSH-Schlüsseldatei mithilfe von Folgendem generieren:Wenn Sie nur den privaten PUTTY-Schlüssel (
id_rsa.ppk
Datei) haben, müssen Sie ihn zuerst konvertieren.id_rsa.ppk
Datei ausid_rsa
(ohne Erweiterung)Nachdem Sie über einen privaten OpenSSH-Schlüssel verfügen, können Sie das
ssh-keygen
Tool wie oben beschrieben verwenden, um den Schlüssel zu bearbeiten.Bonus: Das PKCS # 1 PEM-codierte Public Key Format
Um ehrlich zu sein, weiß ich nicht, wofür dieser Schlüssel verwendet wird, da ich ihn nicht gebraucht habe. Aber ich habe es in meinen Notizen, die ich im Laufe der Jahre zusammengestellt habe, und ich werde es hier für eine gesunde Güte aufnehmen. Die Datei sieht folgendermaßen aus:
Diese Datei kann mit einem privaten OpenSSH-Schlüssel (wie oben unter "Regenerieren öffentlicher Schlüssel" generiert) generiert werden, indem:
Alternativ können Sie einen öffentlichen OpenSSH-Schlüssel verwenden, indem Sie:
Verweise:
quelle
.ppk
in eine.pub
Datei enthalten. Der Nebeneffekt, dass der zwischengeschalteteid_rsa
private Schlüssel 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 nutzte auch die Gelegenheit, um einige Missstände neu zu formulieren, die auftauchen, wenn ich auf diese Antwort zurückblicke. Danke für Ihren Beitrag.ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pub
das löste es. DANKE!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: Laden Sie den neuesten Kitt herunter und öffnen Sie den Kitt
Schritt 2: Laden Sie Ihre vorhandene private Schlüsseldatei (siehe Abbildung unten)
Schritt 3: Geben Sie die Passphrase für den Schlüssel ein, wenn Sie dazu aufgefordert werden, und klicken Sie auf OK
Schritt 4: Wie im folgenden Bild gezeigt, wählen Sie die Menüregisterkarte "Konvertierung" und dann "OpenSSH-Schlüssel exportieren".
Speichern Sie die neue private Schlüsseldatei am bevorzugten Speicherort und verwenden Sie sie entsprechend.
quelle
load pubkey invalid format
Warnung erhalten, als ich den Schlüssel mit dem Export OpenSSH-Schlüssel exportiert habe . Bei Verwendung des OpenSSH-Schlüssels exportieren (neues Dateiformat erzwingen) ging es verloren .Wenn Sie Ihren öffentlichen Schlüssel mit der Zwischenablage kopieren und einfügen, kann es vorkommen, dass die Zeichenfolge für den öffentlichen Schlüssel unterbrochen wird, die eine neue Zeile enthält.
Stellen Sie sicher, dass Ihre öffentliche Schlüsselzeichenfolge aus einer Zeile besteht.
quelle
TL; DR:
id_rsa.pub
Stellen Sie außerdem sicher, dass Sie sich in ASCII / UTF-8 befinden.Ich hatte das gleiche Problem, aber die akzeptierte Antwort allein funktionierte aufgrund der Textcodierung nicht, was ein zusätzliches, leicht zu übersehendes Problem war.
Wenn ich renne
In Windows PowerShell wird die Ausgabe
id_rsa.pub
in UTF-16 LE BOM- Codierung gespeichert , 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 Stückliste erläutert wurden . Anscheinend erkennt OpenSSH die frühere Textcodierung nicht und erzeugt einen identischen Fehler:Das Kopieren und Einfügen der Ausgabe
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 zu der akzeptierten Antwort sein , aber ich habe noch nicht genug Karma, um hier einen Kommentar abzugeben.
quelle
ssh-keygen -f ~/.ssh/id_rsa -y | ac ~/.ssh/id_rsa.pub
stattdessen verwenden.Es scheint, dass
ssh
Ihr öffentlicher Schlüssel nicht gelesen werden kann. Aber das spielt keine Rolle.Sie laden Ihren öffentlichen Schlüssel auf github hoch, authentifizieren sich jedoch mit Ihrem privaten Schlüssel . Siehe zB den Abschnitt DATEIEN in
ssh(1)
.quelle
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
quelle
Ich hatte die gleiche Warnung. Es war ein sehr alter Schlüssel. Ich habe einen Schlüssel auf dem aktuellen OpenSSH 7 neu generiert und der Fehler war verschwunden.
quelle
Der Fehler ist irreführend - er sagt "
pubkey
", während er auf eine private Schlüsseldatei zeigt~/.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 die Bereitstellung
~/.ssh/id_rsa.pub
durch automatisierte Skripte übersprungen.Alle
ssh
Verwendungen funktionierten, aber der Fehler ließ mich an ein mögliches Durcheinander denken.Überhaupt nicht -
strace
half zu bemerken, dass der Auslöser tatsächlich die*.pub
Datei war:quelle
Nach dem Update hatte ich das gleiche Problem. Ich habe PEM
key_file
ohne Erweiterung verwendet und einfach.pem
mein Problem behoben. Jetzt ist die Dateikey_file.pem
.quelle
Wenn Sie Windows 10 mit dem integrierten SSH verwenden, werden ab August 2020 nur noch ed25519-Schlüssel unterstützt. Sie erhalten den
key_load_public: invalid format
Fehler, wenn Sie zB einen RSA-Schlüssel verwenden.Laut diesem GitHub-Problem sollte es irgendwann im Jahr 2020 über Windows Update behoben werden. Eine Lösung besteht also darin, nur auf den Versand des Updates zu warten.
Wenn Sie nicht warten können, besteht eine Problemumgehung darin, einen neuen ed25519-Schlüssel zu generieren, was ohnehin ein guter Rat ist .
Sie können es zB mit Github verwenden, aber einige ältere Systeme unterstützen dieses neuere Format möglicherweise nicht.
Wenn Sie nach dem Generieren Ihres Schlüssels eine der folgenden Funktionen verwenden, vergessen Sie nicht, diese zu aktualisieren!
~\.ssh\config
könnte immer noch auf den alten Schlüssel zeigen.ssh-add
Befehl zu ssh-agent hinzuquelle