Sample code for 30+ languages & platforms
DataFlex

SSH Keyboard Authentication

See more SSH Examples

Demonstrates how to implement keyboard authentication with an SSH server.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoSsh
    String sHostname
    Integer iPort
    String sXmlResponse
    Handle hoXml
    String sTemp1
    Boolean bTemp1

    Move False To iSuccess

    // This example assumes the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    Get Create (RefClass(cComChilkatSsh)) To hoSsh
    If (Not(IsComObjectCreated(hoSsh))) Begin
        Send CreateComObject of hoSsh
    End

    // Set some timeouts, in milliseconds:
    Set ComConnectTimeoutMs Of hoSsh To 5000
    Set ComIdleTimeoutMs Of hoSsh To 15000

    // Connect to the SSH server.  
    // The standard SSH port = 22
    // The hostname may be a hostname or IP address.
    Move "sftp.example.com" To sHostname
    Move 22 To iPort
    Get ComConnect Of hoSsh sHostname iPort To iSuccess
    If (iSuccess <> True) Begin
        Get ComLastErrorText Of hoSsh To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Begin keyboard authentication..
    Get ComStartKeyboardAuth Of hoSsh "myLogin" To sXmlResponse
    Get ComLastMethodSuccess Of hoSsh To bTemp1
    If (bTemp1 <> True) Begin
        Get ComLastErrorText Of hoSsh To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // If a user authentication banner was received, then your app
    // may display it prior to prompting for the password.
    Get ComUserAuthBanner Of hoSsh To sTemp1
    Showln "UserAuthBanner: " sTemp1

    Get Create (RefClass(cComChilkatXml)) To hoXml
    If (Not(IsComObjectCreated(hoXml))) Begin
        Send CreateComObject of hoXml
    End

    Get ComLoadXml Of hoXml sXmlResponse To iSuccess
    // Assume LoadXml succeeds for the example..
    Get ComHasChildWithTag Of hoXml "success" To bTemp1
    If (bTemp1 = True) Begin
        Showln "No password required, already authenticated."
        Procedure_Return
    End

    Get ComHasChildWithTag Of hoXml "error" To bTemp1
    If (bTemp1 = True) Begin
        Showln "Authentication already failed."
        Procedure_Return
    End

    // See the online reference documentation for Chilkat SSH.
    // The XML returned by StartKeyboardAuth will contain an infoRequest
    // with one or more prompts that your application may choose to display.

    // Call ContinueKeyboardAuth, passing in the whatever information is requires (such as the password).
    // Typically, keyboard authentication requires one call to ContinueKeyboardAuth 
    // using the password.  Theoretically, the SSH server could prompt for additional pieces
    // of information.  The authentication is completed when the XML returned contains
    // either a "success" or "error" child node.

    // This example asumes only one call to ContinueKeyboardAuth is required.
    Get ComContinueKeyboardAuth Of hoSsh "myPassword" To sXmlResponse
    Get ComLastMethodSuccess Of hoSsh To bTemp1
    If (bTemp1 <> True) Begin
        Get ComLastErrorText Of hoSsh To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get ComLoadXml Of hoXml sXmlResponse To iSuccess
    // Assume LoadXml succeeds for the example..
    Get ComHasChildWithTag Of hoXml "success" To bTemp1
    If (bTemp1 = True) Begin
        Showln "SSH Keyboard Authentication Successful!"
        Procedure_Return
    End

    Get ComHasChildWithTag Of hoXml "error" To bTemp1
    If (bTemp1 = True) Begin
        Showln "Authentication failed."
        Procedure_Return
    End



End_Procedure