How to convert .ppk key to OpenSSH key under Linux?

379,963

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.
  • 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
Share:
379,963

Related videos on Youtube

marioosh
Author by

marioosh

Updated on September 17, 2022

Comments

  • marioosh
    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
    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
    jous over 10 years
    I 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
    Amit Bera over 9 years
    hi i already have a .pub then it is need to create public key again
  • Ryan Shillington
    Ryan Shillington over 9 years
    If 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
    Jasen about 9 years
    This 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
    Tobi over 8 years
    the 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
    vladkras over 8 years
    I had to add this key to my ./ssh/config file Host mysite.com Hostname mysite.com IdentityFile ~/.ssh/id_dsa IdentitiesOnly yes
  • Gert van den Berg
    Gert van den Berg over 8 years
    This 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.
    Daniel W. about 8 years
    Some elliptic curve formats (ECDS etc) are only available in the beta putty tools yet.
  • pHiL
    pHiL over 7 years
    great. thx for the image! however meanwhile its --volume=/path/to/file.ppk:/tmp/id.ppk and not id_dsa.ppk
  • Alex
    Alex over 4 years
    Yeah, the ppk files I've seen have had the appropriate markers, and this has worked just fine.
  • Geverson Carvalho
    Geverson Carvalho over 3 years
    You may like to add --network none
  • Danon
    Danon over 2 years
    I get puttygen: error loading '/tmp/id.ppk': PuTTY key format too new