Konvertieren von mit PuTTYgen (Windows) generierten SSH-Schlüsselpaaren in Schlüsselpaare, die von ssh-agent und Keychain (Linux) verwendet werden

464

Ich habe Schlüsselpaare mit PuTTYgen generiert und mich mit Pageant angemeldet, sodass ich meine Passphrase beim Systemstart nur einmal eingeben muss.

Wie erreiche ich das unter Linux? Ich habe gehört, keychainaber ich höre, dass es ein anderes Schlüsselpaarformat verwendet - ich möchte meine Windows-Schlüssel nicht ändern und es wäre schön, wenn ich sowohl unter Windows als auch unter Linux auf dieselbe Weise nahtlos eine Verbindung herstellen könnte.

TCSGrad
quelle
Es sollte auch unter Linux keine Probleme mit der Verwendung der Schlüssel geben ... kopieren Sie sie einfach und fügen Sie den Pub zu autorisierten Schlüsseln hinzu ... obwohl ich Ihre Frage zugegebenermaßen nicht ganz verstehe.
Randall Hunt
17
Nein, es gibt - ich weiß so viel, dass die von PuttyGen und ssh-agent verwendeten Schlüsselformate unterschiedlich sind und explizit konvertiert werden müssen - siehe Kalebs ausführliche Antwort unten.
TCSGrad

Antworten:

714

puttygenunterstützt den Export Ihres privaten Schlüssels in ein OpenSSH-kompatibles Format. Sie können dann OpenSSH-Tools verwenden, um den öffentlichen Schlüssel neu zu erstellen.

  1. Öffnen Sie PuttyGen
  2. Klicken Sie auf Laden
  3. Laden Sie Ihren privaten Schlüssel
  4. Gehen Sie zu Conversions->Export OpenSSHund exportieren Sie Ihren privaten Schlüssel
  5. Kopieren Sie Ihren privaten Schlüssel nach ~/.ssh/id_dsa(oder id_rsa).
  6. Erstellen Sie die RFC 4716-Version des öffentlichen Schlüssels mit ssh-keygen

    ssh-keygen -e -f ~/.ssh/id_dsa > ~/.ssh/id_dsa_com.pub
    
  7. Konvertieren Sie die RFC 4716-Version des öffentlichen Schlüssels in das OpenSSH-Format:

    ssh-keygen -i -f ~/.ssh/id_dsa_com.pub > ~/.ssh/id_dsa.pub
    

Sehen Sie diese und diese für weitere Informationen.

Kaleb Pederson
quelle
12
Für diejenigen, die It is required that your private key files are NOT accessible by othersFehler bekommen , wie ich gelaufen war cd ~/.sshundchmod 700 id_rsa
Experte
77
Du meinst chmod 600 id_rsa . Die Datei sollte nicht ausführbar sein. :)
Sig11
2
Diese Antwort war für mich der Schlüssel, um ssh über die Windows-Befehlszeile mit passwortlosen Schlüsseln abzurufen (speziell für den Git-Zugriff). Hätte mir stundenlange Schmerzen erspart, wenn ich es früher gesehen hätte! Vielen Dank!
Cori
2
Kann Puttygen über die CLI ausgeführt werden?
CMCDragonkai
20
Ich gehe davon aus, dass dies etwas Neues ist, aber wenn Sie Ihren privaten Schlüssel in puttygen öffnen, wird Ihnen automatisch eine OpenSSH-kompatible, kopierbare öffentliche Schlüsselzeichenfolge in der Benutzeroberfläche angezeigt.
UpTheCreek
161

Wenn Sie nur einen öffentlichen Schlüssel eines Benutzers im PuTTY-Format haben, können Sie ihn wie folgt in das Standard-OpenSSh-Format konvertieren:

ssh-keygen -i -f keyfile.pub > newkeyfile.pub

Verweise

Kopie des Artikels

Ich vergesse das immer wieder, also werde ich es hier schreiben. Nicht-Geeks, gehen Sie einfach weiter.

Die häufigste Methode zum Erstellen eines Schlüssels unter Windows ist die Verwendung von Putty / Puttygen. Puttygen bietet ein nützliches Dienstprogramm zum Konvertieren eines privaten Linux-Schlüssels in das Putty-Format. Was jedoch nicht angesprochen wird, ist, dass das Speichern des öffentlichen Schlüssels mit puttygen auf einem Linux-Server nicht funktioniert. Windows legt einige Daten in verschiedenen Bereichen ab und fügt Zeilenumbrüche hinzu.

Die Lösung: Wenn Sie beim Erstellen Ihres Schlüsselpaars in puttygen zum Bildschirm für den öffentlichen Schlüssel gelangen, kopieren Sie den öffentlichen Schlüssel und fügen Sie ihn in eine Textdatei mit der Erweiterung .pub ein. Sie sparen Ihrem System Stunden Frustration beim Lesen solcher Beiträge.

Sysadmins, Sie erhalten jedoch immer die Wonky-Schlüsseldatei, die keine Fehlermeldung im Authentifizierungsprotokoll ausgibt, außer, dass kein Schlüssel gefunden wurde und das Kennwort versucht wird. Obwohl die Schlüssel aller anderen einwandfrei funktionieren und Sie diesen Schlüssel 15 Mal an den Benutzer zurückgesendet haben.

ssh-keygen -i -f keyfile.pub > newkeyfile.pub

Sollte einen vorhandenen öffentlichen Puttygen-Schlüssel in das OpenSSH-Format konvertieren.

Bukzor
quelle
2
Möglicherweise möchten Sie auch den Kommentar des Benutzers aus der Comment:Zeile kopieren und in dieselbe Zeile wie der neue Schlüssel einfügen, die durch ein Leerzeichen getrennt ist. Ich weiß nicht, warum ssh-keygen dies nicht standardmäßig tut.
Tobia
2
Dies gibt mir einen Fehler von:decode blob failed: invalid format
Chris Stryczynski
Wenn Sie den Originalartikel lesen, besteht das Schlüsseldetail darin, dass dieser Ansatz nur funktioniert, wenn Sie den Schlüssel von puttygen kopieren, während Sie die Benutzeroberfläche durchlaufen. Er konvertiert keinen bereits generierten Schlüssel aus von puttygen erstellten Dateien.
Slm
Kann ich dasselbe Tool verwenden, um es in die andere Richtung zu konvertieren?
Olle Härstedt
Ja, sieht so aus, als würden Sie sich Folgendes ansehen: ssh-keygen -e -f openssh_key.pub> putty.pub
Erik
148

Neuere Versionen von PuTTYgen (meins ist 0.64) können den öffentlichen OpenSSH-Schlüssel anzeigen, der im Linux-System in die .ssh/authorized_keysDatei eingefügt werden soll, wie in der folgenden Abbildung dargestellt:

Geben Sie hier die Bildbeschreibung ein

Zac
quelle
7
Diese Antwort beschreibt, wie Sie die Schlüsselauthentifizierung auf einer Fernbedienung einrichten, die das OpenSSH-Format verwendet. Um einen von Putty generierten Schlüssel auf einem Linux- Client zu verwenden , reicht diese Antwort jedoch nicht aus. Ich folgte der akzeptierten Antwort und es funktionierte hervorragend.
Wberry
52

Wenn Sie die privaten und öffentlichen Schlüssel aus einer PuTTY-formatierten Schlüsseldatei abrufen möchten, können Sie sie auch puttygenauf * nix-Systemen verwenden. Für die meisten apt-basierten Systeme puttygenist dies Teil des putty-toolsPakets.

Ausgabe eines privaten Schlüssels aus einer PuTTY-formatierten Schlüsseldatei:

$ puttygen keyfile.pem -O private-openssh -o avdev.pvk

Für den öffentlichen Schlüssel:

$ puttygen keyfile.pem -L

John Jawed
quelle
Wenn Sie dies aus irgendeinem Grund auf einer Windows-Box tun MÜSSEN (können nicht alle Schlüssel sicher auf ein * nix übertragen) und so viele Schlüssel über die GUI verwenden müssen, versuchen Sie, die Unix-Quelle unter Cygwin zu kompilieren. Diese puttygen.exe gibt Ihnen CLI "Batch-Modus" wie oben beschrieben.
Toddius Zho
2
OSX:brew install putty
Juha Palomäki
1
Das sollte umgekehrt werden: puttygen inppk -O private-openssh -o outpemund puttygen inppk -L(oder ssh-keygen -y -f outpem)
dave_thompson_085
27
sudo apt-get install putty

Dadurch wird das Puttygen-Tool automatisch installiert.

Führen Sie nun die folgenden Schritte im Terminal aus, um die mit dem SSH-Befehl zu verwendende PPK-Datei zu konvertieren

puttygen mykey.ppk -O private-openssh -o my-openssh-key

Dann können Sie über SSH eine Verbindung herstellen mit:

ssh -v [email protected] -i my-openssh-key

http://www.graphicmist.in/use-your-putty-ppk-file-to-ssh-remote-server-in-ubuntu/#comment-28603

Purnendu Singh
quelle
Dies zeigt nicht wirklich mehr als das, was bereits in der Antwort von @John Jawed
Martin Prikryl
Die Argumente erklären, was sie darstellen. +1
Danronmoon
GROSS! Das funktioniert. Um Kitt auf Macos zu installieren: Brew Putty installieren
Dylan B
14

Ich hatte kürzlich dieses Problem, als ich von Putty für Linux zu Remmina für Linux wechselte. Ich habe also viele PPK-Dateien für Putty in meinem .puttyVerzeichnis, da ich es seit 8 Jahren benutze. Dafür habe ich einen einfachen forBefehl für die Bash-Shell verwendet, um alle Dateien zu erstellen:

cd ~/.putty
for X in *.ppk; do puttygen $X -L > ~/.ssh/$(echo $X | sed 's,./,,' | sed 's/.ppk//g').pub; puttygen $X -O private-openssh -o ~/.ssh/$(echo $X | sed 's,./,,' | sed 's/.ppk//g').pvk; done;

Sehr schnell und auf den Punkt gebracht, erledigte die Arbeit für alle Dateien, die Kitt hatte. Wenn ein Schlüssel mit einem Kennwort gefunden wird, wird er angehalten und zuerst nach dem Kennwort für diesen Schlüssel gefragt und dann fortgefahren.

jfreak53
quelle
2
Für faule Leute wie mich ist hier Kopieren-Einfügen, um Puttygen auf Ubuntu zu bekommen: Sudo Apt-Get Install Putty-Tools
Lennart Rolland
"einfach" - ich würde es hassen, kompliziert zu sehen!
Alex Jansen
8

Es ist wahrscheinlich einfacher, Ihre Schlüssel unter Linux zu erstellen und PuTTYgen zu verwenden, um die Schlüssel in das PuTTY-Format zu konvertieren.

PuTTY FAQ: A.2.2

Bradley Kreider
quelle
14
Leider ist dies keine Option, wenn Sie über vorhandene Schlüssel verfügen, die Sie verwenden müssen.
Experte
6

Ich denke, TCSgrad wollte (vor einigen Jahren) fragen, wie man Linux dazu bringt, sich so zu verhalten, wie es sein Windows-Computer tut. Das heißt, es gibt einen Agenten (Festzug), der eine entschlüsselte Kopie eines privaten Schlüssels enthält, sodass die Passphrase nur einmal eingegeben werden muss. Anschließend kann sich der ssh-Client putty ohne Eingabe von Kennwörtern bei Computern anmelden, auf denen sein öffentlicher Schlüssel als "autorisiert" aufgeführt ist.

Das Analoge dazu ist, dass Linux als SSH-Client einen Agenten hat, der einen entschlüsselten privaten Schlüssel besitzt, sodass der Befehl ssh, wenn TCSgrad "ssh host" eingibt, seinen privaten Schlüssel erhält und ohne Aufforderung zur Eingabe eines Kennworts fortfährt. Der Host müsste natürlich den öffentlichen Schlüssel in ~ / .ssh / authorized_keys halten.

Das Linux-Analogon zu diesem Szenario wird mit ssh-agent (dem Festzug-Analogon) und ssh-add (dem Analogon zum Hinzufügen eines privaten Schlüssels zum Festzug) ausgeführt.

Die Methode, die für mich funktioniert hat, war: $ ssh-agent $ SHELL Diese $ SHELL war der Zaubertrick, den ich brauchte, um den Agenten zum Laufen zu bringen und weiterzulaufen. Ich fand das irgendwo im Netz und es endete ein paar Stunden damit, meinen Kopf gegen die Wand zu schlagen.

Jetzt läuft das Analogon eines Festzuges, ein Agent ohne Schlüssel.

Wenn Sie $ ssh-add selbst eingeben, werden (standardmäßig) die privaten Schlüssel hinzugefügt, die in den Standardidentitätsdateien in ~ / .ssh aufgeführt sind.

Einen Webartikel mit viel mehr Details finden Sie hier

kovacsbv
quelle
0

PPK → OpenSSH RSA mit PuttyGen & Docker.

Privat Schlüssel:

docker run --rm -v $(pwd):/app zinuzoid/puttygen private.ppk -O private-openssh -o my-openssh-key

Öffentlicher Schlüssel:

docker run --rm -v $(pwd):/app zinuzoid/puttygen private.ppk -L -o my-openssh-key.pub

Siehe auch https://hub.docker.com/r/zinuzoid/puttygen

Uriy MerkUriy
quelle