Sample code for 30+ languages & platforms
Visual FoxPro

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 Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loSsh
LOCAL lnChannelNum
LOCAL loSaMatch
LOCAL loSbReceived
LOCAL lnMoreComing

lnSuccess = 0

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

loSsh = CreateObject('Chilkat.Ssh')

lnSuccess = loSsh.Connect("SSH_SERVER_DOMAIN_OR_IP_ADDRESS",22)
IF (lnSuccess <> 1) THEN
    ? loSsh.LastErrorText
    RELEASE loSsh
    CANCEL
ENDIF

* Authenticate using login/password:
lnSuccess = loSsh.AuthenticatePw("myLogin","myPassword")
IF (lnSuccess <> 1) THEN
    ? loSsh.LastErrorText
    RELEASE loSsh
    CANCEL
ENDIF

* Start a shell session.
lnChannelNum = loSsh.QuickShell()
IF (lnChannelNum < 0) THEN
    ? loSsh.LastErrorText
    RELEASE loSsh
    CANCEL
ENDIF

* 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..)
lnSuccess = loSsh.ChannelReceiveUntilMatch(lnChannelNum,">","utf-8",1)
IF (lnSuccess <> 1) THEN
    ? loSsh.LastErrorText
    RELEASE loSsh
    CANCEL
ENDIF

* Show what we received so far:
? loSsh.GetReceivedText(lnChannelNum,"utf-8")

* Send the "ena" command to enable privileged mode.
* (For the Cisco switch, terminate command with a single CR char.)
lnSuccess = loSsh.ChannelSendString(lnChannelNum,"ena" + CHR(13),"utf-8")
* Assume success for this example to make it shorter..

* Read to the "Password:" prompt.
lnSuccess = loSsh.ChannelReceiveUntilMatch(lnChannelNum,"Password:","utf-8",1)
IF (lnSuccess <> 1) THEN
    ? loSsh.LastErrorText
    RELEASE loSsh
    CANCEL
ENDIF

* Show what we received...
? loSsh.GetReceivedText(lnChannelNum,"utf-8")

* Send the password.
lnSuccess = loSsh.ChannelSendString(lnChannelNum,"MY_PASSWORD_FOR_ELEVATED_PRIVILEGE" + CHR(13),"utf-8")

* The prompt now changes from "Something>" to "Something#>
* Read until the new prompt..
lnSuccess = loSsh.ChannelReceiveUntilMatch(lnChannelNum,"#","utf-8",1)
IF (lnSuccess <> 1) THEN
    ? loSsh.LastErrorText
    RELEASE loSsh
    CANCEL
ENDIF

* Show what we received...
? loSsh.GetReceivedText(lnChannelNum,"utf-8")

* 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.
lnSuccess = loSsh.ChannelSendString(lnChannelNum,"show running-config" + CHR(13),"utf-8")

* Consume the response until we end with another prompt.
loSaMatch = CreateObject('Chilkat.StringArray')
* 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...
loSaMatch.Append("YOUR_PROMPT#")
loSaMatch.Append("--More--")

loSbReceived = CreateObject('Chilkat.StringBuilder')
lnMoreComing = 1
DO WHILE (lnMoreComing = 1)

    lnSuccess = loSsh.ChannelReceiveUntilMatchN(lnChannelNum,loSaMatch,"utf-8",1)
    IF (lnSuccess <> 1) THEN
        ? loSsh.LastErrorText
        RELEASE loSsh
        RELEASE loSaMatch
        RELEASE loSbReceived
        CANCEL
    ENDIF

    lnMoreComing = 0

    loSbReceived.Clear()
    loSbReceived.Append(loSsh.GetReceivedText(lnChannelNum,"utf-8"))

    ? loSbReceived.GetAsString()

    IF (loSbReceived.Contains("--More--",1) = 1) THEN
        lnMoreComing = 1

        * Send a SPACE char just as if we were interactively pressing the SPACE key to get more output.
        lnSuccess = loSsh.ChannelSendString(lnChannelNum," ","utf-8")
    ENDIF

ENDDO

loSsh.Disconnect()

RELEASE loSsh
RELEASE loSaMatch
RELEASE loSbReceived