Perché serve convertire
OpenSSH non sa leggere il formato PPK. Dargli direttamente un file .ppk fallisce. Sul nostro sistema di prova il messaggio era questo, e altre versioni possono mostrarne uno diverso, come quello in invalid format:
Load key "key.ppk": error in libcrypto
La conversione cambia solo il formato del file. La chiave resta la stessa, quindi i server che già la accettano continuano ad accettarla.
Installare lo strumento di conversione
# Debian and Ubuntu
sudo apt install putty-tools
# macOS with Homebrew
brew install putty
Da .ppk a OpenSSH
puttygen key.ppk -O private-openssh -o ~/.ssh/id_ed25519
puttygen key.ppk -O public-openssh -o ~/.ssh/id_ed25519.pub
Se la chiave ha una passphrase, puttygen la chiede. Il nuovo file mantiene la stessa passphrase. Poi controlla il risultato:
ssh-keygen -lf ~/.ssh/id_ed25519.pub
puttygen key.ppk -O fingerprint
Entrambi stampano la stessa impronta SHA256:. Nella nostra prova il file di output è stato creato con modo 600, che è ciò che vuole ssh. Se ssh si lamenta comunque, vedi unprotected private key file.
Per ottenere solo la riga della chiave pubblica da una chiave OpenSSH, vedi come ricavare la chiave pubblica da quella privata.
Chiavi RSA: formato vecchio o nuovo
Per una chiave RSA, private-openssh scrive il formato vecchio, con BEGIN RSA PRIVATE KEY come prima riga. Per ed25519 scrive sempre quello nuovo. Se vuoi il formato più recente anche per RSA, usa:
puttygen key.ppk -O private-openssh-new -o ~/.ssh/id_rsa
OpenSSH attuale legge entrambi. Usa il vecchio solo per uno strumento che non sa leggere BEGIN OPENSSH PRIVATE KEY.
Da OpenSSH a .ppk
puttygen ~/.ssh/id_ed25519 -O private -o key.ppk
Controlla la prima riga del nuovo file:
PuTTY-User-Key-File-3: ssh-ed25519
PPK versione 3 e strumenti più vecchi
Quel 3 è la versione del formato. È quella predefinita dal 2021. Protegge le passphrase con Argon2, e gli strumenti precedenti al 2021 che accettano file PPK non la leggono. Per quelli, scrivi la versione 2:
puttygen ~/.ssh/id_ed25519 -O private -o key.ppk --ppk-param version=2
La prima riga allora dice PuTTY-User-Key-File-2. La versione 2 resiste meno ai tentativi di indovinare la passphrase, quindi usala solo quando devi e aggiorna lo strumento appena puoi.
Uso negli script con una passphrase
Queste opzioni leggono la passphrase da un file invece di chiederla. Metti il file in un posto privato ed eliminalo dopo:
puttygen key.ppk --old-passphrase pass.txt -O private-openssh -o id_ed25519
Aggiungi --new-passphrase newpass.txt per impostarne una diversa. Per rimuovere la passphrase, usa un file vuoto, oppure /dev/null. Fallo solo se vuoi davvero lasciare la chiave senza protezione.
Con la finestra del generatore di chiavi su Windows
- Clicca Load e apri il file
.ppk, oppure usa Conversions poi Import per una chiave OpenSSH. - Per scrivere OpenSSH, usa Conversions poi Export OpenSSH key.
- Per scrivere PPK, clicca Save private key.
Domande
OpenSSH può usare un file .ppk?
No. ssh non legge il formato PPK. Converti prima la chiave come mostrato sopra e usa il nuovo file.
Convertire un .ppk cambia la chiave?
No. Cambia solo il formato del file, quindi i server che accettano la chiave continuano ad accettarla. Il fingerprint è lo stesso prima e dopo.
ssh-keygen può convertire una chiave privata .ppk?
No. ssh-keygen non legge le chiavi private PPK. Usa il convertitore mostrato sopra.
Fonti
- Generatore di chiavi, capitolo 8 del manuale
- Formato dei file PPK, appendice C del manuale
- ssh-keygen(1), manuale OpenBSD