How to convert .ppk key to OpenSSH key under Linux?
Solution 1
Do it with Putty.
-
Linux: with your package manager, install PuTTY (or the more minimal PuTTY-tools):
- Ubuntu
sudo apt-get install putty-tools
- Debian-like
apt-get install putty-tools
- RPM based
yum install putty
- Gentoo
emerge putty
- Archlinux
sudo pacman -S putty
- etc.
- Ubuntu
OS X: Install Homebrew, then run
brew install putty
Place your keys in some directory, e.g. your home folder. Now convert the PPK keys to SSH keypairs:cache search
To generate the private key:
cd ~
puttygen id_dsa.ppk -O private-openssh -o id_dsa
and to generate the public key:
puttygen id_dsa.ppk -O public-openssh -o id_dsa.pub
Move these keys to ~/.ssh
and make sure the permissions are set to private for your private key:
mkdir -p ~/.ssh
mv -i ~/id_dsa* ~/.ssh
chmod 600 ~/.ssh/id_dsa
chmod 666 ~/.ssh/id_dsa.pub
If you have already tried to perform a 'git clone' operation you might need to do this also
chmod 666 ~/.ssh/known_hosts
Solution 2
ssh-keygen -i -f id_dsa_1024_a.pub > id_dsa_1024_a_openssh.pub
-
-i
flag is import from other than openssh format -
-f
flag means read from input file
Source: a blogpost at burnz.wordpress.com
Solution 3
Get the private key:
open the .ppk file in puttygen:
puttygen ~/.ssh/id_dsa.ppk
export as openssh:
Conversions → Export OpenSSH key
Get the public key:
open like before the private key with puttygen, the public key is under public key for pasting into OpenSSH authorized_keys file
Solution 4
I prepared a Docker container to make life simpler:
docker run --rm \
--volume=/path/to/file.ppk:/tmp/id_dsa.ppk \
--volume=/path/to/output:/tmp/out/ \
czerasz/putty-tools
Where:
/path/to/file.ppk
- local path to your ppk file/path/to/output
- local path to where the private and public key should be placed
Related videos on Youtube
marioosh
Updated on September 17, 2022Comments
-
marioosh over 1 year
I know that is possible to convert .ppk under puttygen in Windows, but how to do that on Linux? Is this possible ?
-
oscarah over 11 years.ppk files are the full key pairs, I don't think the command above or the blog post apply to that.
-
jous over 10 yearsI think I meant that it works if you use puttygen's "Save public key" button. ssh-keygen do not understand true .ppk files because they lack those '---- BEGIN SSH2 PUBLIC KEY ----' markers. You can find the public key in the .ppk file between lines "Public-Lines:.." and "Private-Lines:.." though.
-
Amit Bera over 9 yearshi i already have a .pub then it is need to create public key again
-
Ryan Shillington over 9 yearsIf you came here looking for how to do it in windows, run "puttygen yourkey.ppk", and then under the Conversions menu choose "Export OpenSSH key" to get the private key.
-
Jasen about 9 yearsThis worked for me with a public-key file - puttygen seems to require a private key. it's seems that all it did was rearrange the base-64 part into a single line
-
Tobi over 8 yearsthe solution from @jous is much nicer since you don't need the private key to convert a public key + you don't need to install putty
-
vladkras over 8 yearsI had to add this key to my
./ssh/config
fileHost mysite.com Hostname mysite.com IdentityFile ~/.ssh/id_dsa IdentitiesOnly yes
-
Gert van den Berg over 8 yearsThis does not seem to cover private keys, which is why I would want to do the conversion, I already have a public key saved somewhere...
-
Daniel W. about 8 yearsSome elliptic curve formats (ECDS etc) are only available in the beta putty tools yet.
-
pHiL over 7 yearsgreat. thx for the image! however meanwhile its
--volume=/path/to/file.ppk:/tmp/id.ppk
and notid_dsa.ppk
-
Alex over 4 yearsYeah, the ppk files I've seen have had the appropriate markers, and this has worked just fine.
-
Geverson Carvalho over 3 yearsYou may like to add
--network none
-
Danon over 2 yearsI get
puttygen: error loading '/tmp/id.ppk': PuTTY key format too new