Sample code for 30+ languages & platforms
Tcl

Convert PuTTY Private Key (ppk) to OpenSSH (pem)

See more SSH Key Examples

Convert a PuTTY format private key file (.ppk) to OpenSSH (.pem).

Chilkat Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

set key [new_CkSshKey]

# Load an unencrypted or encrypted PuTTY private key.

# If  your PuTTY private key is encrypted, set the Password
# property before calling FromPuttyPrivateKey.
# If your PuTTY private key is not encrypted, it makes no diffference
# if Password is set or not set.
CkSshKey_put_Password $key "secret"

# First load the .ppk file into a string:

set keyStr [CkSshKey_loadText $key "putty_private_key.ppk"]

# Import into the SSH key object:
set success [CkSshKey_FromPuttyPrivateKey $key $keyStr]
if {$success != 1} then {
    puts [CkSshKey_lastErrorText $key]
    delete_CkSshKey $key
    exit
}

# Convert to an encrypted or unencrypted OpenSSH key.

# First demonstrate converting to an unencrypted OpenSSH key

set bEncrypt 0
set unencryptedKeyStr [CkSshKey_toOpenSshPrivateKey $key $bEncrypt]
set success [CkSshKey_SaveText $key $unencryptedKeyStr "unencrypted_openssh.pem"]
if {$success != 1} then {
    puts [CkSshKey_lastErrorText $key]
    delete_CkSshKey $key
    exit
}

# Save to an encrypted OpenSSH PEM file:

set bEncrypt 1
CkSshKey_put_Password $key "myPassword"
set encryptedKeyStr [CkSshKey_toOpenSshPrivateKey $key $bEncrypt]
set success [CkSshKey_SaveText $key $encryptedKeyStr "encrypted_openssh.pem"]
if {$success != 1} then {
    puts [CkSshKey_lastErrorText $key]
    delete_CkSshKey $key
    exit
}

puts "Done!"

delete_CkSshKey $key