PureBasic
PureBasic
SSH Authentication using an SSH Certificate
See more SSH Examples
Demonstrates how to authenticate using an SSH certificate.Chilkat PureBasic Downloads
IncludeFile "CkSshKey.pb"
IncludeFile "CkStringBuilder.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.
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))
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)
CkStringBuilder::ckDispose(sbSshCert)
CkStringBuilder::ckDispose(sbPrivKey)
CkSshKey::ckDispose(key)
CkSsh::ckDispose(ssh)
ProcedureReturn
EndIf
success = CkSsh::ckAuthenticatePk(ssh,"myLogin",key)
If success <> 1
Debug CkSsh::ckLastErrorText(ssh)
CkStringBuilder::ckDispose(sbSshCert)
CkStringBuilder::ckDispose(sbPrivKey)
CkSshKey::ckDispose(key)
CkSsh::ckDispose(ssh)
ProcedureReturn
EndIf
Debug "Public-Key Authentication using an SSH Certificate was Successful!"
CkStringBuilder::ckDispose(sbSshCert)
CkStringBuilder::ckDispose(sbPrivKey)
CkSshKey::ckDispose(key)
CkSsh::ckDispose(ssh)
ProcedureReturn
EndProcedure