Comment convertir une clé .ppk en clé OpenSSH sous Linux?

188

Je sais qu'il est possible de convertir .ppk sous puttygen dans Windows, mais comment faire cela sous Linux? Est-ce possible ?

marioosh
la source

Réponses:

275

Faites-le avec du mastic.

  • Linux: avec votre gestionnaire de paquets, installez PuTTY (ou le plus petit des outils PuTTY):

    • Ubuntu sudo apt-get install putty-tools
    • Debian-like apt-get install putty-tools
    • Basé sur RPM yum install putty
    • Gentoo emerge putty
    • Archlinux sudo pacman -S putty
    • etc.
  • OS X: Installez Homebrew , puis lancezbrew install putty

Placez vos clés dans un répertoire, par exemple votre dossier personnel. Convertissez maintenant les clés PPK en paires de clés SSH: recherche dans le cache

Pour générer la clé privée :

cd ~
puttygen id_dsa.ppk -O private-openssh -o id_dsa

et pour générer la clé publique :

puttygen id_dsa.ppk -O public-openssh -o id_dsa.pub

Déplacez ces clés vers ~/.sshet assurez-vous que les autorisations sont définies sur privé pour votre clé privée:

mkdir -p ~/.ssh
mv -i ~/id_dsa* ~/.ssh
chmod 600 ~/.ssh/id_dsa
chmod 666 ~/.ssh/id_dsa.pub

Si vous avez déjà essayé d'effectuer une opération ' git clone ', vous devrez peut-être le faire aussi

chmod 666 ~/.ssh/known_hosts
Stanley Williams
la source
salut j'ai déjà un .pub alors il est nécessaire de créer une clé publique à nouveau
Amit Bera
1
Si vous êtes venu ici pour savoir comment procéder sous Windows, exécutez "puttygen yourkey.ppk", puis sous le menu Conversions, choisissez "Exporter la clé OpenSSH" pour obtenir la clé privée.
Ryan Shillington
1
la solution de @jous est beaucoup plus agréable car vous n'avez pas besoin de la clé privée pour convertir une clé publique + vous n'avez pas besoin d'installer de mastic
Tobi
Je devais ajouter cette clé à mon ./ssh/configdossier Host mysite.com Hostname mysite.com IdentityFile ~/.ssh/id_dsa IdentitiesOnly yes
vendredi
Certains formats de courbes elliptiques (ECDS, etc.) ne sont encore disponibles que dans les outils de mastic bêta.
Daniel W.
39
ssh-keygen -i -f id_dsa_1024_a.pub > id_dsa_1024_a_openssh.pub
  • -i le drapeau est importé d'un format autre que le format openssh
  • -f drapeau signifie lire à partir du fichier d'entrée

Source: un blogpost à burnz.wordpress.com

jous
la source
17
Les fichiers .ppk sont les paires de clés complètes, je ne pense pas que la commande ci-dessus ou l'article de blog s'applique à cela.
Peter Becker
2
Je pense que je voulais dire que cela fonctionne si vous utilisez le bouton "Enregistrer la clé publique" de puttygen. ssh-keygen ne comprend pas les vrais fichiers .ppk car il leur manque les marqueurs '---- BEGIN SSH2 PUBLIC KEY ----'. Vous pouvez trouver la clé publique dans le fichier .ppk entre les lignes "Public-Lines: .." et "Private-Lines: ..".
Juillet
1
Cela a fonctionné pour moi avec un fichier de clé publique - puttygen semble nécessiter une clé privée. il semble que tout ce qu'il a fait a été de réorganiser la partie base 64 en une seule ligne
Jasen
2
Cela ne semble pas couvrir les clés privées, c'est pourquoi je voudrais effectuer la conversion. J'ai déjà une clé publique sauvegardée quelque part ...
Gert van den Berg
Oui, les fichiers ppk que j'ai vus ont les marqueurs appropriés, et cela a très bien fonctionné .
tylerl
5

Obtenez la clé privée:

ouvrez le fichier .ppk dans puttygen:

puttygen ~/.ssh/id_dsa.ppk

exporter en opensh:

Conversions → Exporter la clé OpenSSH

Obtenez la clé publique:

ouverte comme auparavant avec la clé privée avec puttygen, la clé publique est sous clé publique pour le coller dans le fichier OpenSSH allowed_keys

Bar Horing
la source
4

J'ai préparé un conteneur Docker pour simplifier la vie:

docker run --rm \
           --volume=/path/to/file.ppk:/tmp/id_dsa.ppk \
           --volume=/path/to/output:/tmp/out/ \
           czerasz/putty-tools

Où:

  • /path/to/file.ppk - chemin local vers votre fichier ppk
  • /path/to/output - chemin local vers l'endroit où les clés privée et publique doivent être placées
Czerasz
la source
1
génial. merci pour l'image! Cependant, en attendant --volume=/path/to/file.ppk:/tmp/id.ppk, c'estid_dsa.ppk
pHiL