Как я могу использовать SSH для запуска команд Cisco IOS в режиме глобальной конфигурации?

Я знаю о Kron, но, возможно, less возможности запуска глобальных команд конфигурации:

http://www.techrepublic.com/article/schedule-commands-with-cisco-ios-kron/

Если я подkeyаюсь с помощью Putty, Putty может запускать несколько команд после inputа в систему и работает как шарм. Дело в том, что я хочу автоматически inputить в коммутатор каждую ночь в 11 вечера и закрывать ряд interfaceов.

Я пытаюсь использовать sshpass, но, похоже, только 1 команду за раз.

Существует также беспроигрышный способ ввода переkeyателей cisco, но с IOS 15.0:

Password-less ssh login using pki to Cisco IOS

  • Можно ли установить настенный кронштейн с помощью стойки?
  • Как я могу сказать, что маршрутизатор cisco отбрасывает пинги из-за подозрения DOS или если он испытывает потерю пакетов?
  • Сетевое взаимодействие. Использование общедоступных IP-адресов для serverов без NAT.
  • HP 5120 vlan не работает
  • Можно ли изменить напряжение на одном порту на коммутаторе HP ProCurve 2910al POE и как?
  • 2x восходящие линии в HSRP - как настроить переkeyатель?
  • Каковы мои возможности в замене шумного вентилятора в моем управляемом коммутатором GigE для Linksys Cisco SRW2008P?
  • Смешивание SFP с разной скоростью
  • 2 Solutions collect form web for “Как я могу использовать SSH для запуска команд Cisco IOS в режиме глобальной конфигурации?”

    Случилось, что у меня была такая же работа, как и несколько лет назад. Вот что я сделал в то time, надеюсь, что это поможет:

    #!/usr/bin/expect -f set ipadr [lindex $argv 0] set cmd [lindex $argv 1] set fich [lindex $argv 2] if { ${cmd} == 1 } then {set comm "sh flash | tee tftp://TFTP-IP-ADDRESS/essai\r"} else {set comm "copy flash:${fich} tftp://TFTP-IP-ADDRESS\r"} spawn ssh niji@${ipadr} expect { "password:" { send "YOURPASSWORDHERE\r" } "(yes/no)?" { send "yes\r"; expect { "password:" { send "YOURPASSWORDHERE\r"; }}} "Name:" { send "YOURUSERNAMEHERE\r"; sleep 3 ; send "YOURPASSWORDHERE\r"; } "Connection refused" { exit } } expect { ">" { send "en\r" ; sleep 3; send "EN-PASSWD\r";} "#" { send "\r" } } expect { "#" { send "${comm}" ; sleep 5; send "\r" ;send "\r" } } expect { "#" { send "exit\r"; send "quit\r" } } 

    Это подkeyает устройство IOS с IP-адресом, предоставленным в качестве аргумента. Пароли и имена пользователей жестко закодированы, поэтому я предполагаю, что вы хотите улучшить это.

    Команда, отправленная на маршрутизатор, это «copy run tftp» или что-то подобное, но вы можете изменить его на все, что вам нужно.

    Это было некоторое time назад, я полагаю, что я бы сделал несколько повторных работ, если бы мне пришлось повторно использовать его сейчас, но это может быть хорошей базой для начала.

    Ура,

    Хорошо, я нашел это:

    / usr / local / bin / sshpass -p password ssh admin@1.1.1.1 <ios-cmds.txt

    где ios-cmds.txt содержит все команды в отдельных stringх, как если бы я набирал их последовательно.

    Кроме того, один из моих коллег предложил использовать команду linux:

     expect 

    РЕДАКТИРОВАТЬ: Одна вещь, о которой нужно быть осторожной, заkeyается в том, что если session SSH никогда не состоялся, часть обмена certificateами с коммутатором заставит команду сбой молча или ничего не делать. Сначала подkeyитесь к коммутатору, чтобы принять certificate вручную, а затем SSHPASS будет рад войти в систему и выполнить команды.

    EDIT 2: после комментария YBounya, я закончил с этим скриптом, который в основном проходит через последовательные IP-адреса и отkeyает ряд interfaceов, сценарий получает «on» или «off» в качестве аргумента для выполнения операции вkeyения или выkeyения :

     #!/usr/bin/expect -f if { [lindex $argv 0] eq "on"} { set action "no shut\r" puts "Turning on switchports\n" } elseif { [lindex $argv 0] eq "off" } { set action "shut\r" puts "Turning off switchports\n" } else { puts "No power action found. Provide \"on\" or \"off\"." exit } proc shutPort {ip action} { spawn ssh admin@192.168.201.$ip expect { "(yes/no)" { send "yes\r"; expect { "assword:" { send -- "REAL_PASSWORD\r"; }}} "assword: " { send -- "REAL_PASSWORD\r" } "No route to host" { return } ;# switch uses Telnet or just not listen on port 22 "Connection refused" { return } ;# switch is not reachable "modulus too small" { return } ;# RSA key is not acceptable } expect ">" send -- "en\r" expect "assword: " send -- "REAL_PASSWORD\r" expect -re "\r\n#" send -- "conf t\r" expect "(config)#" send -- "int ran gig1/0/7-48\r" expect { "config-if-range" { send -- $action } ; # if previous sends succeeds, enter interface range mode "marker" { send "int ran gig0/7-48\r"; # interface syntax didn't work expect { "config-if-range" { send -- $action } "marker" { send "int ran fas0/7-48\r"; expect { "config-if-range" { send -- $action } "marker" { send "int ran fas0/7-24\r"; expect { "config-if-range" { send -- $action } } } } } } } } send -- "exi\r" send -- "exi\r" send -- "exi\r" expect eof } for {set i 42} {$i < 51} {incr i} { shutPort $i $action }