DataFlex
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
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