Sample code for 30+ languages & platforms
PureBasic

SFTP Public-Key Authentication (id_ed25519)

See more SFTP Examples

Demonstrates how to authenticate with an SSH/SFTP server using publickey authentication with an Ed25519 private key (id_ed25519).

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.

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

    ; The id_ed25519 file should contain something like this:
    ; (You can open it in a text editor..)

    ; -----BEGIN OPENSSH PRIVATE KEY-----
    ; b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABDIeK9+Xw
    ; 6Do9gnhtrJu5iJAAAAZAAAAAEAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIMh/Ge7fjQCssmVd
    ; BqjYZbRAI0pY8IrnB6J1yLetq34OAAAAoMVP7cvy4hTiAINA3I4v55OonkpKza8mzfUW18
    ; RDQeYL3ovCVaAYOGcCpf/SW3QiY6tnXq+5WDEfJ7Z/kQ0nl2+1wSLOytxpyO+IY0rRtLrX
    ; 6e/agR4nbZpt/MFG6xqcNASbtDgg+9IWGvDrtXOLFofx07/zml+UjFL0tXRpCjOxeqKyXH
    ; t8SRgdT97d9/bYPwapaXY+b2DVVy5/LVx4Sq8=
    ; -----END OPENSSH PRIVATE KEY-----

    privKeyText.s = CkSshKey::ckLoadText(key,"c:/temp/id_ed25519")
    If CkSshKey::ckLastMethodSuccess(key) <> 1
        Debug CkSshKey::ckLastErrorText(key)
        CkSshKey::ckDispose(key)
        ProcedureReturn
    EndIf

    ; If your private key was saved encrypted, then you'll need the password.
    ; In this example, the password "blahblah" is valid for the above key -- which is a real Ed25519 key generated/saved from puttygen.
    CkSshKey::setCkPassword(key, "blahblah")

    success = CkSshKey::ckFromOpenSshPrivateKey(key,privKeyText)
    If success <> 1
        Debug CkSshKey::ckLastErrorText(key)
        CkSshKey::ckDispose(key)
        ProcedureReturn
    EndIf

    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)

    hostname.s = "sftp.example.com"
    port.i = 22
    success = CkSFtp::ckConnect(sftp,hostname,port)
    If success <> 1
        Debug CkSFtp::ckLastErrorText(sftp)
        CkSshKey::ckDispose(key)
        CkSFtp::ckDispose(sftp)
        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)
        CkSshKey::ckDispose(key)
        CkSFtp::ckDispose(sftp)
        ProcedureReturn
    EndIf

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

    ; Now go do whatever you're app needs to do...


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


    ProcedureReturn
EndProcedure