Konvertieren Sie den privaten OpenSSH-Schlüssel in den privaten SSH2-Schlüssel


29

Gibt es eine Möglichkeit, vorhandene OpenSSH-Schlüsselpaare in SSH2-Schlüsselpaare (ssh.com-Format) zu konvertieren?

UPD : Da es einige Antworten gibt, die ssh-keygenplötzlich aufgetaucht sind, erkläre ich, woher ich komme (auch eine nette Antwort auf "Was hast du versucht?").

$> diff --report-identical-files <(ssh-keygen -e -f ~/.ssh/id_dsa) <(ssh-keygen -e -f ~/.ssh/id_dsa.pub)
Files /tmp/zshAGGWAK and /tmp/zshPZiIr6 are identical

Mit anderen Worten, es werden ssh-keygendieselben Schlüssel für private und öffentliche Eingabeschlüssel zurückgegeben (Hashes von Originaldateien unterscheiden sich offensichtlich, ich habe sie zweimal überprüft, um sicherzustellen, dass sie gültige private und öffentliche Schlüssel sind). Es scheint so zu sein, dass ssh-keygennur öffentliche Schlüssel für private oder öffentliche Eingabeschlüssel generiert werden.

Ich mache es falsch oder ist es ein normales Verhalten?

Antworten:


43

Dieses Tutorial mit dem Titel: SSH: Konvertieren von OpenSSH in SSH2 und umgekehrt scheint das zu bieten, wonach Sie suchen.

Konvertieren Sie den OpenSSH-Schlüssel in den SSH2-Schlüssel

Führen Sie die OpenSSH-Version von ssh-keygenauf Ihrem öffentlichen OpenSSH-Schlüssel aus, um sie in das von SSH2 auf dem Remote-Computer benötigte Format zu konvertieren. Dies muss auf dem System erfolgen, auf dem OpenSSH ausgeführt wird.

$ ssh-keygen -e -f ~/.ssh/id_dsa.pub > ~/.ssh/id_dsa_ssh2.pub

Konvertieren Sie den SSH2-Schlüssel in den OpenSSH-Schlüssel

Führen Sie die OpenSSH-Version von ssh-keygenauf Ihrem öffentlichen ssh2-Schlüssel aus, um ihn in das von OpenSSH benötigte Format zu konvertieren. Dies muss auf dem System erfolgen, auf dem OpenSSH ausgeführt wird.

$ ssh-keygen -i -f ~/.ssh/id_dsa_1024_a.pub > ~/.ssh/id_dsa_1024_a_openssh.pub

In diesem Tutorial wird gezeigt, wie die verschiedenen Schlüsseltypen generiert und in andere Formate exportiert werden.

Verwenden Sie dies für private und öffentliche Schlüssel?

Laut der Manpage wäre die Antwort ein Ja. Wenn Sie sich die Manpage ansehen ssh-keygen, heißt es für den -eSwitch:

 -e    This option will read a private or public OpenSSH key file and print
       the key in RFC 4716 SSH Public Key File Format to stdout.  This option
       allows exporting keys for use by several commercial SSH implementations.

In der Praxis scheint es ssh-keygenjedoch nicht möglich zu sein, private Schlüssel zu konvertieren , sondern nur öffentliche.

Beispielsweise:

# Make a new RSA key-pair
$ ssh-keygen -t rsa -f newkey

# attempt to extract the private key
$ ssh-keygen -e -f newkey > newkey_e

# attempt to extract the public key
$ ssh-keygen -e -f newkey.pub > newkey.pub_e

# Notice the supposed extracted private key (newkey_e) and the corresponding extracted public key (newkey.pub_e) have identical `md5sum`'s.
$ for i in *;do md5sum $i;done
d1bd1c12c4a2b9fee4b5f8f83150cf1a  newkey
8b67a7be646918afc7a041119e863be5  newkey_e
13947789d5dcc5322768bd8a2d3f562a  newkey.pub
8b67a7be646918afc7a041119e863be5  newkey.pub_e

Ein Blick auf die resultierenden extrahierten Schlüssel bestätigt dies:

$ grep BEGIN newkey_e newkey.pub_e 
newkey_e:---- BEGIN SSH2 PUBLIC KEY ----
newkey.pub_e:---- BEGIN SSH2 PUBLIC KEY ----

Ich kam aus einem Artikel über diesen Klappentext des Titel ein wenig Googeln: Wie wollen Sie OpenSSH private Schlüsseldateien zu SSH konvertieren . Die Seite schien auf und ab zu sein, aber als ich im Google-Cache nach dieser Seite suchte, fand ich den folgenden Klappentext:

Wie konvertiert man OpenSSH Private Key-Dateien in SSH.com Private Key-Dateien?

Dies kann mit dem Programm ssh-keygen nicht durchgeführt werden, obwohl die meisten Manpages dies für möglich halten. Sie raten davon ab, sodass Sie mehrere öffentliche Schlüssel verwenden. Das einzige Problem ist, dass Sie mit RCF nicht mehr als einen öffentlichen Schlüssel registrieren können.

Der Artikel befasst sich mit einer Methode zum Konvertieren eines privaten OpenSh-Schlüssels in einen privaten SSH.com-Schlüssel mithilfe des PuTTY- puttygen Tools. HINWEIS: puttygen Kann unter Windows und Linux ausgeführt werden.

Öffnen Sie 'puttygen' und generieren Sie ein öffentliches / privates 2048-Bit-RSA-Schlüsselpaar. Stellen Sie sicher, dass Sie ein Kennwort hinzufügen, nachdem es generiert wurde. Speichern Sie den öffentlichen Schlüssel als "puttystyle.pub" und den privaten Schlüssel als "puttystyle". Das Putty-Programm und SSH.com-Programme haben ein gemeinsames Public-Key-Format, aber das Putty-Programm und OpenSSH haben unterschiedliche Public-Key-Formate. Wir werden später darauf zurückkommen. Sie sollten beide Puttystyle-Keys in das Putty-Programm laden können. Die privaten Schlüsselformate für putty und SSH.com sind jedoch nicht identisch, sodass Sie eine konvertierte Datei erstellen müssen. Gehen Sie zum Konvertierungsmenü und exportieren Sie einen SSH.com-Schlüssel. Speichere es als "sshstyle". Kehren Sie nun zum Konvertierungsmenü zurück und exportieren Sie einen openssh-Schlüssel. Speichern Sie es als "openssh". Diese Namen sind willkürlich und Sie können Ihre eigenen wählen. Sie müssen die Namen für die Installation auf einem OpenSSH-Computer später ändern. Siehe unten.

Angesichts des oben puttygenGesagten habe ich mit unserem zuvor generierten Schlüsselpaar private / public openssh Folgendes herausgefunden:

# generate ssh.com private key from private openssh key
$ puttygen newkey -O private-sshcom -o newkey.puttygen-sshcom

# generate ssh.com public key from private openssh key
$ puttygen newkey -O public -o newkey.pub_puttygen-sshcom

# generate openssh public key from private openssh key (for confirmation)
$ puttygen newkey -O public-openssh -o newkey.pub_puttygen-openssh

Die Kommentare sind unterschiedlich, sodass Sie die resultierenden Dateien nicht einfach vergleichen können. Wenn Sie sich also die ersten Zeilen der Tasten ansehen, ist dies ein ziemlich guter Indikator dafür, dass die obigen Befehle erfolgreich waren.

Vergleich der öffentlichen ssh.com-Schlüssel:

$ tail -n +3 newkey.pub_e | head -1 | cut -c 1-60
AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wb

$ tail -n +3 newkey.pub_puttygen-sshcom | head -1 | cut -c 1-60
AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wb

Vergleich der öffentlichen OpenSh-Schlüssel:

$ cut -c 1-100 newkey.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wbz9x/w6I2DmSZVI9TJa6M9jgGE952QsOY

$ cut -c 1-100 newkey.pub_puttygen-openssh 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wbz9x/w6I2DmSZVI9TJa6M9jgGE952QsOY

3
und was ist mit der privaten Schlüsselkonvertierung?
ДМИТРИЙ МАЛИКОВ

@ ДМИТРИЙМАЛИКОВ - warum sollte das wichtig sein? Ich habe es versucht und es scheint entweder für den privaten oder den öffentlichen Schlüssel zu funktionieren.
SLM

1
Nicht sicher , dass es gültige private Schlüssel für mich zurück: $> a="$(ssh-keygen -e -f ~/.ssh/id_rsa)m"; b="$(ssh-keygen -e -f ~/.ssh/id_rsa.pub)m"; md5sum <<< $a; md5sum <<< $b ce615aa3e39e274d0bd81064399cedf8 - ce615aa3e39e274d0bd81064399cedf8 -. Hashes von Originaldateien sind unterschiedlich, siehe oben. Scheint, dass es öffentlichen Schlüssel für privaten oder öffentlichen Eingabeschlüssel zurückgibt.
ДМИТРИЙ МАЛИКОВ

@ ДМИТРИЙМАЛИКОВ - siehe meine Updates zur Antwort. Sie haben Recht, ssh-keygendass Sie öffentliche Schlüssel zurückgeben. Ich habe eine Methode ausgearbeitet, die auf zusätzlichen Recherchen basiert. LMK, wenn es akzeptabel ist.
SLM

1
puttygen-Attribute können schwierig sein: puttygen <OpenSSH_priv_key> -O public -o id_rsa_ssh2_puttygen{.pub}( -Osteht für output- type und -ofür output- file ). Das erzeugt ssh2 privaten und öffentlichen Schlüssel von einem OpenSSH 7.0 erzeugt rsa 2048 Bit private Schlüsseln. Funktioniert nicht auf Win Phone 7.5-Client (* Der SSH-Client von Tommi Pirttiniemi). Aber trotzdem vielen Dank an @ ДМИТРИЙМАЛИКОВ und @slm für eine großartige Antwort. @ Theus Puttygen kommt mit puttyauf Arch.
Tuk0z

1

ssh-keygenexportiert keinen privaten Schlüssel im PEM-Format, konvertiert jedoch einen vorhandenen OpenSSH-privaten Schlüssel in das PEM-Format und überschreibt das Original. Sie müssen lediglich das Passwort bearbeiten.

Der Befehl zum Konvertieren Ihrer ~/.ssh/id_rsaDatei vom OpenSSH-Format in das SSH2-Format (pem) lautet:

ssh-keygen -p -f ~/.ssh/id_rsa -m pem

Geben Sie dann an der Eingabeaufforderung die (alte) und die neue Passphrase ein. Sie können gleich oder auch beide leer sein. Sie können sie auch über die Befehlszeile mit den Optionen -P(alte Passphrase) und -N(neue Passphrase) eingeben. Wenn zum Beispiel die Passphrase leer ist und Sie möchten, dass dies so bleibt:

ssh-keygen -p -P '' -N ''-f ~/.ssh/id_rsa -m pem
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.