Sample code for 30+ languages & platforms
PureBasic

SFTP Public-Key Authentication

See more SFTP Examples

Demonstrates how to authenticate with an SSH/SFTP server using publickey authentication.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkSshKey.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.

    sftp.i = CkSFtp::ckCreate()
    If sftp.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; Set some timeouts, in milliseconds:
    CkSFtp::setCkConnectTimeoutMs(sftp, 5000)
    CkSFtp::setCkIdleTimeoutMs(sftp, 15000)

    ; Connect to the SSH server.  
    ; The standard SSH port = 22
    ; The hostname may be a hostname or IP address.
    hostname.s = "sftp.example.com"
    port.i = 22
    success = CkSFtp::ckConnect(sftp,hostname,port)
    If success <> 1
        Debug CkSFtp::ckLastErrorText(sftp)
        CkSFtp::ckDispose(sftp)
        ProcedureReturn
    EndIf

    key.i = CkSshKey::ckCreate()
    If key.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; Load a PEM file into a string variable:
    ; (This does not load the PEM file into the key.  The LoadText
    ; method is a convenience method for loading the full contents of ANY text
    ; file into a string variable.)
    privKey.s = CkSshKey::ckLoadText(key,"myPrivateKey.pem")
    If CkSshKey::ckLastMethodSuccess(key) <> 1
        Debug CkSshKey::ckLastErrorText(key)
        CkSFtp::ckDispose(sftp)
        CkSshKey::ckDispose(key)
        ProcedureReturn
    EndIf

    ; Load a private key from a PEM string:
    ; (Private keys may be loaded from OpenSSH and Putty formats.
    ; Both encrypted and unencrypted private key file formats
    ; are supported.  This example loads an unencrypted private
    ; key in OpenSSH format.
    success = CkSshKey::ckFromOpenSshPrivateKey(key,privKey)
    If success <> 1
        Debug CkSshKey::ckLastErrorText(key)
        CkSFtp::ckDispose(sftp)
        CkSshKey::ckDispose(key)
        ProcedureReturn
    EndIf

    ; Authenticate with the SSH server.  Chilkat SFTP supports
    ; both password-based authenication as well as public-key
    ; authentication.  
    success = CkSFtp::ckAuthenticatePk(sftp,"myLogin",key)
    If success <> 1
        Debug CkSFtp::ckLastErrorText(sftp)
        CkSFtp::ckDispose(sftp)
        CkSshKey::ckDispose(key)
        ProcedureReturn
    EndIf

    Debug CkSFtp::ckLastErrorText(sftp)
    Debug "Public-Key Authentication Successful!"


    CkSFtp::ckDispose(sftp)
    CkSshKey::ckDispose(key)


    ProcedureReturn
EndProcedure