Come convertire una chiave .ppk in OpenSSH, e viceversa

Esegui puttygen key.ppk -O private-openssh -o id_ed25519. Scrive una chiave privata OpenSSH che ssh può usare e mantiene la stessa passphrase. Per fare il contrario, esegui puttygen id_ed25519 -O private -o key.ppk. Su Debian e Ubuntu lo strumento si trova nel pacchetto putty-tools.

Aggiornata il . Tutti i comandi eseguiti con la versione 0.83 dello strumento PPK su Debian 13, con chiavi ed25519 e RSA 3072, con e senza passphrase.

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

  1. Clicca Load e apri il file .ppk, oppure usa Conversions poi Import per una chiave OpenSSH.
  2. Per scrivere OpenSSH, usa Conversions poi Export OpenSSH key.
  3. 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

Altro in Chiavi e accesso

Tutte le guide