Lianja
Lianja
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 Lianja Downloads
llSuccess = .F.
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
loSsh = createobject("CkSsh")
llSuccess = loSsh.Connect("SSH_SERVER_DOMAIN_OR_IP_ADDRESS",22)
if (llSuccess <> .T.) then
? loSsh.LastErrorText
release loSsh
return
endif
// Authenticate using login/password:
llSuccess = loSsh.AuthenticatePw("myLogin","myPassword")
if (llSuccess <> .T.) then
? loSsh.LastErrorText
release loSsh
return
endif
// Start a shell session.
lnChannelNum = loSsh.QuickShell()
if (lnChannelNum < 0) then
? loSsh.LastErrorText
release loSsh
return
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..)
llSuccess = loSsh.ChannelReceiveUntilMatch(lnChannelNum,">","utf-8",.T.)
if (llSuccess <> .T.) then
? loSsh.LastErrorText
release loSsh
return
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.)
llSuccess = loSsh.ChannelSendString(lnChannelNum,"ena" + Chr(13),"utf-8")
// Assume success for this example to make it shorter..
// Read to the "Password:" prompt.
llSuccess = loSsh.ChannelReceiveUntilMatch(lnChannelNum,"Password:","utf-8",.T.)
if (llSuccess <> .T.) then
? loSsh.LastErrorText
release loSsh
return
endif
// Show what we received...
? loSsh.GetReceivedText(lnChannelNum,"utf-8")
// Send the password.
llSuccess = 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..
llSuccess = loSsh.ChannelReceiveUntilMatch(lnChannelNum,"#","utf-8",.T.)
if (llSuccess <> .T.) then
? loSsh.LastErrorText
release loSsh
return
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.
llSuccess = loSsh.ChannelSendString(lnChannelNum,"show running-config" + Chr(13),"utf-8")
// Consume the response until we end with another prompt.
loSaMatch = createobject("CkStringArray")
// 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("CkStringBuilder")
llMoreComing = .T.
do while (llMoreComing = .T.)
llSuccess = loSsh.ChannelReceiveUntilMatchN(lnChannelNum,loSaMatch,"utf-8",.T.)
if (llSuccess <> .T.) then
? loSsh.LastErrorText
release loSsh
release loSaMatch
release loSbReceived
return
endif
llMoreComing = .F.
loSbReceived.Clear()
loSbReceived.Append(loSsh.GetReceivedText(lnChannelNum,"utf-8"))
? loSbReceived.GetAsString()
if (loSbReceived.Contains("--More--",.T.) = .T.) then
llMoreComing = .T.
// Send a SPACE char just as if we were interactively pressing the SPACE key to get more output.
llSuccess = loSsh.ChannelSendString(lnChannelNum," ","utf-8")
endif
enddo
loSsh.Disconnect()
release loSsh
release loSaMatch
release loSbReceived