Sample code for 30+ languages & platforms
PowerBuilder

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 PowerBuilder Downloads

PowerBuilder
integer li_rc
integer li_Success
oleobject loo_Ssh
integer li_ChannelNum
oleobject loo_SaMatch
oleobject loo_SbReceived
integer li_MoreComing

li_Success = 0

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

loo_Ssh = create oleobject
li_rc = loo_Ssh.ConnectToNewObject("Chilkat.Ssh")
if li_rc < 0 then
    destroy loo_Ssh
    MessageBox("Error","Connecting to COM object failed")
    return
end if

li_Success = loo_Ssh.Connect("SSH_SERVER_DOMAIN_OR_IP_ADDRESS",22)
if li_Success <> 1 then
    Write-Debug loo_Ssh.LastErrorText
    destroy loo_Ssh
    return
end if

// Authenticate using login/password:
li_Success = loo_Ssh.AuthenticatePw("myLogin","myPassword")
if li_Success <> 1 then
    Write-Debug loo_Ssh.LastErrorText
    destroy loo_Ssh
    return
end if

// Start a shell session.
li_ChannelNum = loo_Ssh.QuickShell()
if li_ChannelNum < 0 then
    Write-Debug loo_Ssh.LastErrorText
    destroy loo_Ssh
    return
end if

// 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..)
li_Success = loo_Ssh.ChannelReceiveUntilMatch(li_ChannelNum,">","utf-8",1)
if li_Success <> 1 then
    Write-Debug loo_Ssh.LastErrorText
    destroy loo_Ssh
    return
end if

// Show what we received so far:
Write-Debug loo_Ssh.GetReceivedText(li_ChannelNum,"utf-8")

// Send the "ena" command to enable privileged mode.
// (For the Cisco switch, terminate command with a single CR char.)
li_Success = loo_Ssh.ChannelSendString(li_ChannelNum,"ena~r","utf-8")
// Assume success for this example to make it shorter..

// Read to the "Password:" prompt.
li_Success = loo_Ssh.ChannelReceiveUntilMatch(li_ChannelNum,"Password:","utf-8",1)
if li_Success <> 1 then
    Write-Debug loo_Ssh.LastErrorText
    destroy loo_Ssh
    return
end if

// Show what we received...
Write-Debug loo_Ssh.GetReceivedText(li_ChannelNum,"utf-8")

// Send the password.
li_Success = loo_Ssh.ChannelSendString(li_ChannelNum,"MY_PASSWORD_FOR_ELEVATED_PRIVILEGE~r","utf-8")

// The prompt now changes from "Something>" to "Something#>
// Read until the new prompt..
li_Success = loo_Ssh.ChannelReceiveUntilMatch(li_ChannelNum,"#","utf-8",1)
if li_Success <> 1 then
    Write-Debug loo_Ssh.LastErrorText
    destroy loo_Ssh
    return
end if

// Show what we received...
Write-Debug loo_Ssh.GetReceivedText(li_ChannelNum,"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.
li_Success = loo_Ssh.ChannelSendString(li_ChannelNum,"show running-config~r","utf-8")

// Consume the response until we end with another prompt.
loo_SaMatch = create oleobject
li_rc = loo_SaMatch.ConnectToNewObject("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...
loo_SaMatch.Append("YOUR_PROMPT#")
loo_SaMatch.Append("--More--")

loo_SbReceived = create oleobject
li_rc = loo_SbReceived.ConnectToNewObject("Chilkat.StringBuilder")

li_MoreComing = 1
do while (li_MoreComing = 1)

    li_Success = loo_Ssh.ChannelReceiveUntilMatchN(li_ChannelNum,loo_SaMatch,"utf-8",1)
    if li_Success <> 1 then
        Write-Debug loo_Ssh.LastErrorText
        destroy loo_Ssh
        destroy loo_SaMatch
        destroy loo_SbReceived
        return
    end if

    li_MoreComing = 0

    loo_SbReceived.Clear()
    loo_SbReceived.Append(loo_Ssh.GetReceivedText(li_ChannelNum,"utf-8"))

    Write-Debug loo_SbReceived.GetAsString()

    if loo_SbReceived.Contains("--More--",1) = 1 then
        li_MoreComing = 1

        // Send a SPACE char just as if we were interactively pressing the SPACE key to get more output.
        li_Success = loo_Ssh.ChannelSendString(li_ChannelNum," ","utf-8")
    end if

loop

loo_Ssh.Disconnect()


destroy loo_Ssh
destroy loo_SaMatch
destroy loo_SbReceived