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