Sample code for 30+ languages & platforms
PureBasic

Setting Environment Variables for SCP Transfers

See more SCP Examples

Demonstrates how to set remote environment variables for an SCP transfer.

Note 1: This example requires Chilkat v9.5.0.79 or greater.

Note 2: Setting environment variables for SCP is only supported by some SSH servers.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkScp.pb"
IncludeFile "CkJsonObject.pb"
IncludeFile "CkSsh.pb"

Procedure ChilkatExample()

    success.i = 0

    ; This example requires 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

    ; First connect to an SSH server.
    success = CkSsh::ckConnect(ssh,"example.com",22)
    If success <> 1
        Debug CkSsh::ckLastErrorText(ssh)
        CkSsh::ckDispose(ssh)
        ProcedureReturn
    EndIf

    ; Wait a max of 5 seconds when reading responses..
    CkSsh::setCkIdleTimeoutMs(ssh, 5000)

    ; Authenticate..
    success = CkSsh::ckAuthenticatePw(ssh,"myLogin","myPassword")
    If success <> 1
        Debug CkSsh::ckLastErrorText(ssh)
        CkSsh::ckDispose(ssh)
        ProcedureReturn
    EndIf

    ; After the SSH object is connected and authenticated, we use it
    ; as the underlying transport in our SCP object.
    scp.i = CkScp::ckCreate()
    If scp.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkScp::ckUseSsh(scp,ssh)
    If success <> 1
        Debug CkScp::ckLastErrorText(scp)
        CkSsh::ckDispose(ssh)
        CkScp::ckDispose(scp)
        ProcedureReturn
    EndIf

    ; Specify the environment variables to be set in JSON as follows.
    ; This example sets two environment variables.  One is named "LCS_PASSWORD" and the other "MY_TEST_NAME".
    jsonEnvVars.i = CkJsonObject::ckCreate()
    If jsonEnvVars.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::setCkEmitCompact(jsonEnvVars, 0)
    CkJsonObject::ckUpdateString(jsonEnvVars,"LCS_PASSWORD","secret")
    CkJsonObject::ckUpdateString(jsonEnvVars,"MY_TEST_NAME","abc")
    strEnvVars.s = CkJsonObject::ckEmit(jsonEnvVars)

    Debug strEnvVars

    ; Setting the SendEnv property causes Chilkat to set each environment variable on the SSH server
    ; prior to doing the upload or download.
    CkScp::setCkSendEnv(scp, strEnvVars)

    ; Do the upload..
    remotePath.s = "starfish.jpg"
    localPath.s = "qa_data/jpg/starfish.jpg"
    success = CkScp::ckUploadFile(scp,localPath,remotePath)
    If success <> 1
        Debug CkScp::ckLastErrorText(scp)
        CkSsh::ckDispose(ssh)
        CkScp::ckDispose(scp)
        CkJsonObject::ckDispose(jsonEnvVars)
        ProcedureReturn
    EndIf

    Debug "SCP upload file success."

    ; Disconnect
    CkSsh::ckDisconnect(ssh)


    CkSsh::ckDispose(ssh)
    CkScp::ckDispose(scp)
    CkJsonObject::ckDispose(jsonEnvVars)


    ProcedureReturn
EndProcedure