Sample code for 30+ languages & platforms
PureBasic

SFTP Authentication using an SSH Certificate

See more SFTP Examples

Demonstrates how to SFTP authenticate using an SSH certificate.

Chilkat PureBasic Downloads

PureBasic
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