Pourquoi convertir
OpenSSH ne sait pas lire le format PPK. Lui donner directement un fichier .ppk échoue. Sur notre système de test, le message était celui-ci ; d'autres versions peuvent en afficher un autre, comme celui de invalid format :
Load key "key.ppk": error in libcrypto
La conversion ne change que le format du fichier. La clé reste la même : les serveurs qui l'acceptent déjà continuent de l'accepter.
Installer l'outil de conversion
# Debian and Ubuntu
sudo apt install putty-tools
# macOS with Homebrew
brew install putty
De .ppk vers OpenSSH
puttygen key.ppk -O private-openssh -o ~/.ssh/id_ed25519
puttygen key.ppk -O public-openssh -o ~/.ssh/id_ed25519.pub
Si la clé a une phrase secrète, puttygen la demande. Le nouveau fichier garde la même phrase secrète. Vérifiez ensuite le résultat :
ssh-keygen -lf ~/.ssh/id_ed25519.pub
puttygen key.ppk -O fingerprint
Les deux affichent la même empreinte SHA256:. Dans notre test, le fichier de sortie a été créé en mode 600, ce que ssh attend. Si ssh se plaint malgré tout, voir unprotected private key file.
Pour obtenir seulement la ligne de clé publique d'une clé OpenSSH, voyez comment retrouver la clé publique depuis la clé privée.
Clés RSA : ancien ou nouveau format
Pour une clé RSA, private-openssh écrit l'ancien format, avec BEGIN RSA PRIVATE KEY en première ligne. Pour ed25519, il écrit toujours le nouveau. Si vous voulez aussi le format récent pour RSA, utilisez :
puttygen key.ppk -O private-openssh-new -o ~/.ssh/id_rsa
OpenSSH actuel lit les deux. N'utilisez l'ancien que pour un outil qui ne sait pas lire BEGIN OPENSSH PRIVATE KEY.
D'OpenSSH vers .ppk
puttygen ~/.ssh/id_ed25519 -O private -o key.ppk
Vérifiez la première ligne du nouveau fichier :
PuTTY-User-Key-File-3: ssh-ed25519
PPK version 3 et anciens outils
Ce 3 est la version du format. C'est la valeur par défaut depuis 2021. Il protège les phrases secrètes avec Argon2, et les outils d'avant 2021 qui acceptent les fichiers PPK ne peuvent pas le lire. Pour ceux-là, écrivez la version 2 :
puttygen ~/.ssh/id_ed25519 -O private -o key.ppk --ppk-param version=2
La première ligne indique alors PuTTY-User-Key-File-2. La version 2 résiste moins bien aux tentatives de devinette de la phrase secrète : ne l'utilisez que si vous le devez, et mettez l'outil à jour dès que possible.
Utilisation en script avec une phrase secrète
Ces options lisent la phrase secrète dans un fichier au lieu de la demander. Mettez le fichier dans un endroit privé et supprimez-le ensuite :
puttygen key.ppk --old-passphrase pass.txt -O private-openssh -o id_ed25519
Ajoutez --new-passphrase newpass.txt pour en définir une autre. Pour retirer la phrase secrète, utilisez un fichier vide, ou /dev/null. Ne le faites que si vous voulez vraiment laisser la clé sans protection.
Avec la fenêtre du générateur de clés sous Windows
- Cliquez sur Load et ouvrez le fichier
.ppk, ou utilisez Conversions puis Import pour une clé OpenSSH. - Pour écrire une clé OpenSSH, utilisez Conversions puis Export OpenSSH key.
- Pour écrire un PPK, cliquez sur Save private key.
Questions
OpenSSH peut-il utiliser un fichier .ppk ?
Non. ssh ne lit pas le format PPK. Convertissez d'abord la clé comme indiqué plus haut et utilisez le nouveau fichier.
Convertir un .ppk change-t-il la clé ?
Non. Seul le format du fichier change : les serveurs qui acceptent la clé continuent de l'accepter. L'empreinte est la même avant et après.
ssh-keygen peut-il convertir une clé privée .ppk ?
Non. ssh-keygen ne lit pas les clés privées PPK. Utilisez le convertisseur présenté plus haut.
Sources
- Générateur de clés, manuel, chapitre 8
- Format de fichier PPK, manuel, annexe C
- ssh-keygen(1), manuel OpenBSD