Sample code for 30+ languages & platforms
PureBasic

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 PureBasic Downloads

PureBasic
IncludeFile "CkSshKey.pb"

Procedure ChilkatExample()

    success.i = 0

    key.i = CkSshKey::ckCreate()
    If key.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; 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::setCkPassword(key, "secret")

    ; First load the .ppk file into a string:
    keyStr.s
    keyStr = CkSshKey::ckLoadText(key,"putty_private_key.ppk")

    ; Import into the SSH key object:
    success = CkSshKey::ckFromPuttyPrivateKey(key,keyStr)
    If success <> 1
        Debug CkSshKey::ckLastErrorText(key)
        CkSshKey::ckDispose(key)
        ProcedureReturn
    EndIf

    ; Convert to an encrypted or unencrypted OpenSSH key.

    ; First demonstrate converting to an unencrypted OpenSSH key
    unencryptedKeyStr.s
    bEncrypt.i = 0
    unencryptedKeyStr = CkSshKey::ckToOpenSshPrivateKey(key,bEncrypt)
    success = CkSshKey::ckSaveText(key,unencryptedKeyStr,"unencrypted_openssh.pem")
    If success <> 1
        Debug CkSshKey::ckLastErrorText(key)
        CkSshKey::ckDispose(key)
        ProcedureReturn
    EndIf

    ; Save to an encrypted OpenSSH PEM file:
    encryptedKeyStr.s
    bEncrypt = 1
    CkSshKey::setCkPassword(key, "myPassword")
    encryptedKeyStr = CkSshKey::ckToOpenSshPrivateKey(key,bEncrypt)
    success = CkSshKey::ckSaveText(key,encryptedKeyStr,"encrypted_openssh.pem")
    If success <> 1
        Debug CkSshKey::ckLastErrorText(key)
        CkSshKey::ckDispose(key)
        ProcedureReturn
    EndIf

    Debug "Done!"


    CkSshKey::ckDispose(key)


    ProcedureReturn
EndProcedure