Sample code for 30+ languages & platforms
DataFlex

SSH to Cisco Switch - Processing "More" Responses

See more SSH Examples

Demonstrates connecting to a Cisco switch, running a command to enable privileged mode, then running a command to get a paged response requiring the SPACE char to be sent to process "--More--".

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoSsh
    Integer iChannelNum
    Variant vSaMatch
    Handle hoSaMatch
    Handle hoSbReceived
    Boolean iMoreComing
    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

    Get ComConnect Of hoSsh "SSH_SERVER_DOMAIN_OR_IP_ADDRESS" 22 To iSuccess
    If (iSuccess <> True) Begin
        Get ComLastErrorText Of hoSsh To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Authenticate using login/password:
    Get ComAuthenticatePw Of hoSsh "myLogin" "myPassword" To iSuccess
    If (iSuccess <> True) Begin
        Get ComLastErrorText Of hoSsh To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Start a shell session.
    Get ComQuickShell Of hoSsh To iChannelNum
    If (iChannelNum < 0) Begin
        Get ComLastErrorText Of hoSsh To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // If the CISCO switch returns a prompt with ">", then read until we get the prompt.
    // (It's not actually required that we do this, but it helps to know that all is OK at this point..)
    Get ComChannelReceiveUntilMatch Of hoSsh iChannelNum ">" "utf-8" True To iSuccess
    If (iSuccess <> True) Begin
        Get ComLastErrorText Of hoSsh To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Show what we received so far:
    Get ComGetReceivedText Of hoSsh iChannelNum "utf-8" To sTemp1
    Showln sTemp1

    // Send the "ena" command to enable privileged mode.
    // (For the Cisco switch, terminate command with a single CR char.)
    Get ComChannelSendString Of hoSsh iChannelNum "ena" + (character(13)) "utf-8" To iSuccess
    // Assume success for this example to make it shorter..

    // Read to the "Password:" prompt.
    Get ComChannelReceiveUntilMatch Of hoSsh iChannelNum "Password:" "utf-8" True To iSuccess
    If (iSuccess <> True) Begin
        Get ComLastErrorText Of hoSsh To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Show what we received...
    Get ComGetReceivedText Of hoSsh iChannelNum "utf-8" To sTemp1
    Showln sTemp1

    // Send the password.
    Get ComChannelSendString Of hoSsh iChannelNum "MY_PASSWORD_FOR_ELEVATED_PRIVILEGE" + (character(13)) "utf-8" To iSuccess

    // The prompt now changes from "Something>" to "Something#>
    // Read until the new prompt..
    Get ComChannelReceiveUntilMatch Of hoSsh iChannelNum "#" "utf-8" True To iSuccess
    If (iSuccess <> True) Begin
        Get ComLastErrorText Of hoSsh To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Show what we received...
    Get ComGetReceivedText Of hoSsh iChannelNum "utf-8" To sTemp1
    Showln sTemp1

    // Send the "show running-config" command.
    // The response will be in multiple pages, each ending with "--More--" and requiring a SPACE bar to be sent
    // to get the next page.
    Get ComChannelSendString Of hoSsh iChannelNum "show running-config" + (character(13)) "utf-8" To iSuccess

    // Consume the response until we end with another prompt.
    Get Create (RefClass(cComCkStringArray)) To hoSaMatch
    If (Not(IsComObjectCreated(hoSaMatch))) Begin
        Send CreateComObject of hoSaMatch
    End
    // Change "YOUR_PROMPT" to your actual prompt.  We don't want to check for only "#" because
    // it's not specific enough.  The data in the response could contain the "#" char...
    Get ComAppend Of hoSaMatch "YOUR_PROMPT#" To iSuccess
    Get ComAppend Of hoSaMatch "--More--" To iSuccess

    Get Create (RefClass(cComChilkatStringBuilder)) To hoSbReceived
    If (Not(IsComObjectCreated(hoSbReceived))) Begin
        Send CreateComObject of hoSbReceived
    End
    Move True To iMoreComing
    While (iMoreComing = True)

        Get pvComObject of hoSaMatch to vSaMatch
        Get ComChannelReceiveUntilMatchN Of hoSsh iChannelNum vSaMatch "utf-8" True To iSuccess
        If (iSuccess <> True) Begin
            Get ComLastErrorText Of hoSsh To sTemp1
            Showln sTemp1
            Procedure_Return
        End

        Move False To iMoreComing

        Send ComClear To hoSbReceived
        Get ComGetReceivedText Of hoSsh iChannelNum "utf-8" To sTemp1
        Get ComAppend Of hoSbReceived sTemp1 To iSuccess

        Get ComGetAsString Of hoSbReceived To sTemp1
        Showln sTemp1

        Get ComContains Of hoSbReceived "--More--" True To bTemp1
        If (bTemp1 = True) Begin
            Move True To iMoreComing

            // Send a SPACE char just as if we were interactively pressing the SPACE key to get more output.
            Get ComChannelSendString Of hoSsh iChannelNum " " "utf-8" To iSuccess
        End

    Loop

    Send ComDisconnect To hoSsh


End_Procedure