Search code examples
bashshellunixcisco

Run command on cisco switch


I made the below script to login to a switch and execute a command. as soon as i execute the script it logins to switch and exits without running the command.

#!/usr/bin/expect -f

set timeout 3000

spawn bash -c "ssh ananair@10.60.255.100"

expect "*assword:"

send "pass@123\n"

expect "*#"

send "show interfaces status"

Solution

  • I suspect the problem is the missing \n in your final send. If you simply send "string", then expect never hits Enter at the end of the command, And since there's no final expect, it figures its work is done, and exits, probably even before it has a chance to echo the command it sent but never executed.

    Consider the following:

    #!/usr/bin/expect -f
    
    set timeout 3000
    
    spawn ssh switchhostname          # no need to run this inside a shell
    
    expect "ssword:"
    
    send "1ns3cur3\n"                 # it would be better to use key based auth...
    
    expect "#"
    
    send "term len 0\n"               # tell the switch to avoid "More" prompts
    
    expect "#"
    
    send "show interfaces status\n"   # note the final "\n"
    
    expect "#"                        # don't quit until the "show" command finishes
    

    You might also consider getting access to this information via SNMP.