web-dev-qa-db-fra.com

Convertir la clé privée OpenSSH en clé privée SSH2

Existe-t-il un moyen de convertir une paire de clés OpenSSH existante en une paire de clés SSH2 (format ssh.com)?

UPD : car il y a des réponses sur ssh-keygen est soudainement apparu, je vais vous expliquer d'où je viens (ce sera aussi une belle réponse sur "qu'avez-vous essayé?").

$> 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

En d'autres termes, ssh-keygen renvoie les mêmes clés pour les clés d'entrée privées et publiques (les hachages des fichiers d'origine sont évidemment différents, je les ai vérifiés deux fois pour s'assurer qu'ils sont des clés privées et publiques valides). Il semble que ssh-keygen génère uniquement la clé publique pour la clé d'entrée privée ou publique.

Je me trompe ou c'est un comportement normal?

Ce tutoriel intitulé: SSH: Convertir OpenSSH en SSH2 et vice versa semble offrir ce que vous recherchez.

Convertir la clé OpenSSH en clé SSH2

Exécutez la version OpenSSH de ssh-keygen sur votre clé publique OpenSSH pour la convertir au format requis par SSH2 sur la machine distante. Cela doit être fait sur le système exécutant OpenSSH.

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

Convertir la clé SSH2 en clé OpenSSH

Exécutez la version OpenSSH de ssh-keygen sur votre clé publique ssh2 pour la convertir au format requis par OpenSSH. Cela doit être fait sur le système exécutant OpenSSH.

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

Le didacticiel continue pour montrer comment à la fois générer les différents types de clés et comment les exporter vers d'autres formats.

L'utiliser pour les clés privées et publiques?

Selon la page de manuel, la réponse serait oui. En regardant la page de manuel pour ssh-keygen il indique ce qui suit pour le -e commutateur:

 -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.

Mais en pratique, il semblerait que ssh-keygen ne peut pas convertir les clés privées, uniquement les clés publiques.

Par exemple:

# 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

L'examen des clés extraites résultantes le confirme:

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

Googler un peu Je suis tombé sur ce texte de présentation d'un article intitulé: Comment convertir les fichiers de clé privée OpenSSH en SSH . Le site semblait être de haut en bas mais en regardant dans le cache de Google pour cette page J'ai trouvé le texte de présentation suivant:

Comment convertir les fichiers de clé privée OpenSSH en fichiers de clé privée SSH.com?

Cela ne peut pas être fait par le programme ssh-keygen même si la plupart des pages de manuel le disent. Ils le découragent afin que vous utilisiez plusieurs clés publiques. Le seul problème est que RCF ne vous permettra pas d'enregistrer plus d'une clé publique.

L'article passe en revue une méthode pour convertir une clé privée openssh en une clé privée ssh.com en utilisant l'outil PuTTY'sputtygen. REMARQUE: puttygen peut être exécuté à partir de Windows et Linux.

Ouvrez 'puttygen' et générez une paire de clés publique/privée rsa 2048 bits. Assurez-vous d'ajouter un mot de passe après sa génération. Enregistrez la clé publique sous "puttystyle.pub" et enregistrez la clé privée sous "puttystyle". Le programme PuTTY et les programmes SSH.com partagent un format de clé publique commun, mais le programme PuTTY et OpenSSH ont différents formats de clé publique. Nous reviendrons à ceci plus tard. Vous devriez pouvoir charger les deux clés puttystyle dans le programme PuTTY. Cependant, les formats de clé privée pour PuTTY et SSH.com ne sont pas les mêmes et vous devrez donc créer un fichier converti. Accédez au menu des conversions et exportez une clé SSH.com. Enregistrez-le sous "sshstyle". Revenez maintenant au menu des conversions et exportez une clé openssh. Enregistrez-le sous "openssh". Ces noms sont arbitraires et vous pouvez choisir les vôtres. Vous devrez modifier les noms pour l'installation sur une machine OpenSSH, plus tard. Voir ci-dessous.

Compte tenu de ce qui précède, j'ai élaboré ce qui suit en utilisant puttygen, en utilisant notre paire de clés openssh privée/publique précédemment générée:

# 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

Le commentaire est différent, vous ne pouvez donc pas simplement comparer les fichiers résultants, donc si vous regardez les premières lignes des touches, c'est un assez bon indicateur que les commandes ci-dessus ont réussi.

Comparaison des clés publiques ssh.com:

$ 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

Comparaison des clés publiques opensh:

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

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

ssh-keygen n'exportera pas une clé privée au format pem, mais il convertira une clé privée openssh existante au format pem, écrasant l'original. Il vous suffit de modifier le mot de passe.

La commande pour convertir votre ~/.ssh/id_rsa le fichier du format OpenSSH au format SSH2 (pem) est:

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

Fournissez ensuite la (ancienne) et la nouvelle phrase secrète à l'invite. Ils peuvent être identiques, ou même les deux être vides. Ou vous pouvez les fournir sur la ligne de commande en utilisant le -P (ancienne phrase secrète) et -N (nouvelle phrase secrète). Par exemple, si la phrase secrète est vide et que vous souhaitez la conserver de cette façon:

ssh-keygen -p -P '' -N ''-f ~/.ssh/id_rsa -m pem
3
user43957