Visual FoxPro
Visual FoxPro
Convert a PuTTY Private Key (.ppk) to OpenSSH (.pem)
See more SSH Examples
Demonstrates converting a PuTTY format private key to OpenSSH format. The .ppk is imported with FromPuttyPrivateKey and re-exported with ToOpenSshPrivateKey, both unencrypted and encrypted.
Note: The file paths are relative to the application's current working directory. Supply the paths to your own files.
Background: PuTTY and OpenSSH store the same underlying key material in different container formats, so converting between them is a re-encoding rather than a new key — the corresponding public key, and therefore the server-side
authorized_keys entry, is unchanged. This matters when moving between Windows tooling built around PuTTY and Unix tooling that expects PEM. Note that the Password property serves double duty: it decrypts the key on import and encrypts it on export, so set it appropriately for each step.Chilkat Visual FoxPro Downloads
LOCAL lnSuccess
LOCAL loKey
LOCAL lcKeyStr
LOCAL lnBEncrypt
LOCAL lcUnencryptedKeyStr
LOCAL lcEncryptedKeyStr
lnSuccess = 0
* Demonstrates converting a PuTTY format private key (.ppk) to OpenSSH (.pem) format.
loKey = CreateObject('Chilkat.SshKey')
* Set the password before importing an encrypted PuTTY key. If the key is not encrypted it
* makes no difference whether Password is set. This should come from a secure source rather
* than being hard-coded.
loKey.Password = "myKeyPassword"
* LoadText is a convenience method that reads any text file into a string. It does not itself
* load the key.
lcKeyStr = loKey.LoadText("qa_data/putty_private_key.ppk")
IF (loKey.LastMethodSuccess = 0) THEN
? loKey.LastErrorText
RELEASE loKey
CANCEL
ENDIF
lnSuccess = loKey.FromPuttyPrivateKey(lcKeyStr)
IF (lnSuccess = 0) THEN
? loKey.LastErrorText
RELEASE loKey
CANCEL
ENDIF
* Export to an unencrypted OpenSSH key.
lnBEncrypt = 0
lcUnencryptedKeyStr = loKey.ToOpenSshPrivateKey(lnBEncrypt)
IF (loKey.LastMethodSuccess = 0) THEN
? loKey.LastErrorText
RELEASE loKey
CANCEL
ENDIF
lnSuccess = loKey.SaveText(lcUnencryptedKeyStr,"qa_output/unencrypted_openssh.pem")
IF (lnSuccess = 0) THEN
? loKey.LastErrorText
RELEASE loKey
CANCEL
ENDIF
* Export to an encrypted OpenSSH key. The Password property supplies the passphrase used to
* encrypt the output.
lnBEncrypt = 1
loKey.Password = "myExportPassword"
lcEncryptedKeyStr = loKey.ToOpenSshPrivateKey(lnBEncrypt)
IF (loKey.LastMethodSuccess = 0) THEN
? loKey.LastErrorText
RELEASE loKey
CANCEL
ENDIF
lnSuccess = loKey.SaveText(lcEncryptedKeyStr,"qa_output/encrypted_openssh.pem")
IF (lnSuccess = 0) THEN
? loKey.LastErrorText
RELEASE loKey
CANCEL
ENDIF
? "Done!"
RELEASE loKey