How to use the OpenSSH to PPK Converter
- Paste the private key or open the file (id_ed25519, id_rsa or a .pem).
- Enter its passphrase if it has one.
- Choose PPK version 3, or version 2 for older PuTTY, WinSCP or FileZilla.
- Optionally set a passphrase for the .ppk, then download it and load it in PuTTY under Connection → SSH → Auth → Credentials.
How do you convert an OpenSSH key to PPK?
PuTTY, WinSCP and FileZilla on Windows load private keys in PuTTY's own .ppk format, so a key made by ssh-keygen or downloaded as a .pem from a cloud provider has to be converted first. Paste the key above, enter its passphrase if it has one, pick the PPK version, and download the .ppk: the key and its fingerprint stay exactly the same.
With PuTTY installed, the same thing is puttygen id_ed25519 -o id_ed25519.ppk, or in the PuTTYgen window: Conversions → Import key, then Save private key.
What it reads
| Input | Starts with | Notes |
|---|---|---|
| OpenSSH | -----BEGIN OPENSSH PRIVATE KEY----- | What ssh-keygen writes; encrypted ones too (aes256-ctr, aes-cbc, aes-gcm) |
| PKCS#1 RSA | -----BEGIN RSA PRIVATE KEY----- | AWS .pem files, ssh-keygen -m PEM; AES-encrypted ones too |
| SEC1 EC | -----BEGIN EC PRIVATE KEY----- | ECDSA P-256, P-384, P-521 |
| PKCS#8 | -----BEGIN PRIVATE KEY----- | openssl genpkey output, RSA, EC and Ed25519 |
| Encrypted PKCS#8 | -----BEGIN ENCRYPTED PRIVATE KEY----- | PBES2 with PBKDF2 and AES-CBC |
| OpenSSL DSA | -----BEGIN DSA PRIVATE KEY----- | Converted, but DSA should be retired |
Two things cannot be done in a browser: keys encrypted with chacha20-poly1305@openssh.com or with 3DES (DES-EDE3-CBC in an old PEM). Re-encrypt them first with ssh-keygen -p -f key, which rewrites the key with aes256-ctr. FIDO keys (sk-ssh-ed25519@openssh.com) cannot be converted at all: their private half lives on the hardware token, and the file holds only a handle to it.
PPK version 3 or version 2?
- Version 3 is what PuTTY 0.75 (2021) and later write. Its passphrase protection is Argon2id; this page uses PuTTYgen's default 8 MiB of memory, one lane and 13 passes, with a random salt, and writes those settings into the file. The MAC is HMAC-SHA-256.
- Version 2 is for PuTTY before 0.75, and for WinSCP and FileZilla releases older than their PPK3 support. Its key derivation is SHA-1 of the passphrase with no salt or work factor, which is quick to guess: if you need version 2, use a long passphrase or keep the file somewhere only you can read.
Both versions encrypt the private part with AES-256-CBC, add PuTTY's padding, and protect the whole file with a MAC, exactly as PuTTYgen does. A key with no comment gets imported-openssh-key, the name PuTTYgen gives it.
A worked example
AWS gave you deploy.pem and you need it in WinSCP. Open deploy.pem above, choose version 3, set a passphrase, and download id_rsa.ppk. Before you load it, check it is the right key: the fingerprint here must match ssh-keygen -l -f deploy.pem on any machine with OpenSSH. On Windows 10 and later:
ssh-keygen -l -f $env:USERPROFILE\Downloads\deploy.pemIn PuTTY, set it under Connection → SSH → Auth → Credentials, "Private key file for authentication". In WinSCP, Advanced → SSH → Authentication → Private key file.
Common errors and how to fix them
- "This is a public key" You pasted
id_ed25519.pub. Conversion needs the private key, the file without.pub. - "Wrong passphrase" The key could not be decrypted with what you typed. Passphrases are case-sensitive; if the key never had one, leave the field empty.
- "Unable to use key file … (OpenSSH SSH-2 private key (new format))" in PuTTY means you gave PuTTY the OpenSSH file itself. Load the
.ppkinstead. - "PuTTY key format too new" in WinSCP or an old PuTTY: convert again with PPK version 2.
- "Server refused our key" The
.ppkis fine but the server does not have its public key in~/.ssh/authorized_keys. The public key line shown here is what goes there.
Shipown and PuTTY keys
Shipown reads OpenSSH private key files, so keep your original key for the app and use the .ppk only for PuTTY-family tools. When you add a server, the app's main process reads the key and nothing else sees it. To check which keys a server account trusts, paste its authorized_keys into the authorized_keys analyzer.
Frequently asked questions
Can PuTTY use an OpenSSH private key directly?
No. PuTTY and Pageant only load .ppk files, so the key has to be converted once. The converted key is the same key, so the server needs no change.
Which PPK version should I choose?
Version 3 for PuTTY 0.75 or later and current WinSCP. Version 2 only for older PuTTY, WinSCP or FileZilla that reject version 3 with a "too new" error.
How do I convert a .pem file to .ppk?
Open the .pem here and download the .ppk. A .pem from AWS or another cloud is an RSA or EC private key in PEM format, which this page reads directly.
Is my private key uploaded during conversion?
No. The key is decrypted, converted and encrypted again by the page’s script inside your browser, and the result is only offered for download.
Does converting to PPK change my key fingerprint?
No. The fingerprint is a hash of the public key, which conversion does not change. PuTTYgen, ssh-keygen and this page all show the same SHA256 value.
Why does my key say it needs a passphrase I never set?
The file is encrypted, so someone set one when it was made, often a provider or an older ssh-keygen prompt. Without that passphrase the key cannot be read; make a new key if it is lost.