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

29

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 : puisqu'il y a des réponses à propos d' ssh-keygenapparition soudaine, 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-keygenrenvoie 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 cela ssh-keygengénère uniquement une clé publique pour une clé d'entrée privée ou publique.

Je me trompe ou c'est un comportement normal?

ДМИТРИЙ МАЛИКОВ
la source

Réponses:

43

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-keygenvotre 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-keygenvotre 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 montre ensuite comment générer à la fois 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. La recherche dans la page de manuel ssh-keygenindique ce qui suit pour le -ecommutateur:

 -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-keygenvous ne pouvez 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 ensuite en revue une méthode de conversion d'une clé privée openssh en une clé privée ssh.com grâce à l'utilisation de l' puttygen outil PuTTY . 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 des formats de clé publique différents. 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 puttygenutilisant 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
slm
la source
3
et qu'en est-il de la conversion de clé privée ?
ДМИТРИЙ МАЛИКОВ
@ ДМИТРИЙМАЛИКОВ - pourquoi est-ce important? Je l'ai essayé et cela semble fonctionner pour les clés privées ou publiques.
slm
1
Je ne sais pas qu'elle retourne clé privée valide pour moi: $> 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 -. Les hachages des fichiers originaux sont différents, obv. Semble qu'il renvoie la clé publique pour la clé d'entrée privée ou publique.
ДМИТРИЙ МАЛИКОВ
@ ДМИТРИЙМАЛИКОВ - voir mes mises à jour de la réponse. Vous avez raison, c'est de ssh-keygenrendre les clés publiques. J'ai élaboré une méthode basée sur des recherches supplémentaires. LMK si c'est acceptable.
slm
1
Les attributs puttygen peuvent être délicats: puttygen <OpenSSH_priv_key> -O public -o id_rsa_ssh2_puttygen{.pub}( -Oreprésente le type de sortie et le fichier de-o sortie ). Cela génère des clés privées et publiques ssh2 à partir d'une clé privée rsa 2048 bits générée par OpenSSH 7.0. Ne fonctionne pas sur le client Win Phone 7.5 (* Le client SSH de Tommi Pirttiniemi). Mais merci à @ ДМИТРИЙМАЛИКОВ et @slm pour une excellente réponse de toute façon. @Otheus puttygen est livré avec Arch. putty
tuk0z
1

ssh-keygenn'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_rsafichier 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 les options -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
user43957
la source