PureBasic
PureBasic
SFTP Authentication using an SSH Certificate
See more SFTP Examples
Demonstrates how to SFTP authenticate using an SSH certificate.Chilkat PureBasic Downloads
IncludeFile "CkSshKey.pb"
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkSFtp.pb"
Procedure ChilkatExample()
success.i = 0
; This example assumes the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
sbSshCert.i = CkStringBuilder::ckCreate()
If sbSshCert.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkStringBuilder::ckLoadFile(sbSshCert,"qa_data/sshCert/user_ecdsa_key-cert.pub","utf-8")
If success = 0
Debug "Failed to load user_ecdsa_key-cert.pub"
CkStringBuilder::ckDispose(sbSshCert)
ProcedureReturn
EndIf
sbPrivKey.i = CkStringBuilder::ckCreate()
If sbPrivKey.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkStringBuilder::ckLoadFile(sbPrivKey,"qa_data/sshKeys/user_ecdsa_key","utf-8")
If success = 0
Debug "Failed to load user_ecdsa_key"
CkStringBuilder::ckDispose(sbSshCert)
CkStringBuilder::ckDispose(sbPrivKey)
ProcedureReturn
EndIf
key.i = CkSshKey::ckCreate()
If key.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Provide the password if the user_ecdsa_key is stored in an encrypted format.
CkSshKey::setCkPassword(key, "secret")
success = CkSshKey::ckFromOpenSshPrivateKey(key,CkStringBuilder::ckGetAsString(sbPrivKey))
If success = 0
Debug CkSshKey::ckLastErrorText(key)
CkStringBuilder::ckDispose(sbSshCert)
CkStringBuilder::ckDispose(sbPrivKey)
CkSshKey::ckDispose(key)
ProcedureReturn
EndIf
; Indicate that the SSH certificate is to be used for authentication.
; The UseSshCertificate method was added in Chilkat v11.0.0
CkSshKey::ckUseSshCertificate(key,CkStringBuilder::ckGetAsString(sbSshCert))
sftp.i = CkSFtp::ckCreate()
If sftp.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
hostname.s = "sftp.example.com"
port.i = 22
success = CkSFtp::ckConnect(sftp,hostname,port)
If success <> 1
Debug CkSFtp::ckLastErrorText(sftp)
CkStringBuilder::ckDispose(sbSshCert)
CkStringBuilder::ckDispose(sbPrivKey)
CkSshKey::ckDispose(key)
CkSFtp::ckDispose(sftp)
ProcedureReturn
EndIf
success = CkSFtp::ckAuthenticatePk(sftp,"myLogin",key)
If success <> 1
Debug CkSFtp::ckLastErrorText(sftp)
CkStringBuilder::ckDispose(sbSshCert)
CkStringBuilder::ckDispose(sbPrivKey)
CkSshKey::ckDispose(key)
CkSFtp::ckDispose(sftp)
ProcedureReturn
EndIf
Debug "Public-Key Authentication using an SSH Certificate was Successful!"
CkStringBuilder::ckDispose(sbSshCert)
CkStringBuilder::ckDispose(sbPrivKey)
CkSshKey::ckDispose(key)
CkSFtp::ckDispose(sftp)
ProcedureReturn
EndProcedure