PureBasic
PureBasic
SSH Authentication using X.509 Certificates
See more SSH Examples
Demonstrates how to authenticate with an SSH/SFTP server using an certificate's private key.Note: See X.509v3 Certificates for SSH Authentication for more information.
Chilkat PureBasic Downloads
IncludeFile "CkSshKey.pb"
IncludeFile "CkCert.pb"
IncludeFile "CkSsh.pb"
Procedure ChilkatExample()
success.i = 0
; This example assumes the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
ssh.i = CkSsh::ckCreate()
If ssh.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
hostname.s = "ssh.example.com"
port.i = 22
success = CkSsh::ckConnect(ssh,hostname,port)
If success <> 1
Debug CkSsh::ckLastErrorText(ssh)
CkSsh::ckDispose(ssh)
ProcedureReturn
EndIf
; Load the cert + private key from a .pfx.
; Note: Chilkat provides methods for loading certs and private keys from many sources, including smart cards and USB tokens (HSM's)
cert.i = CkCert::ckCreate()
If cert.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkCert::ckLoadPfxFile(cert,"qa_data/pfx/example.pfx","pfx_password")
If success <> 1
Debug CkCert::ckLastErrorText(cert)
CkSsh::ckDispose(ssh)
CkCert::ckDispose(cert)
ProcedureReturn
EndIf
; Get the cert's private key (as PEM) to be used for SSH authentication.
; (The public key is installed on the server.)
privKeyPem.s = CkCert::ckGetPrivateKeyPem(cert)
If CkCert::ckLastMethodSuccess(cert) = 0
Debug CkCert::ckLastErrorText(cert)
CkSsh::ckDispose(ssh)
CkCert::ckDispose(cert)
ProcedureReturn
EndIf
key.i = CkSshKey::ckCreate()
If key.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Load a private key from a PEM string:
success = CkSshKey::ckFromOpenSshPrivateKey(key,privKeyPem)
If success <> 1
Debug CkSshKey::ckLastErrorText(key)
CkSsh::ckDispose(ssh)
CkCert::ckDispose(cert)
CkSshKey::ckDispose(key)
ProcedureReturn
EndIf
; Authenticate with the SSH server.
success = CkSsh::ckAuthenticatePk(ssh,"myLogin",key)
If success <> 1
Debug CkSsh::ckLastErrorText(ssh)
CkSsh::ckDispose(ssh)
CkCert::ckDispose(cert)
CkSshKey::ckDispose(key)
ProcedureReturn
EndIf
Debug "Public-Key Authentication Successful!"
CkSsh::ckDispose(ssh)
CkCert::ckDispose(cert)
CkSshKey::ckDispose(key)
ProcedureReturn
EndProcedure