18 июня 2015

Массовое изменение конфигураций оборудования Cisco


Внести изменение в несколько маршрутизаторов или коммутаторов Cisco совсем не сложно. Но когда колличество оборудования переваливает через некую критическую массу, скажем больше 20, невольно задумываешься как процесс можно автоматизировать.


А сделать это очень просто. В своей работе я использую один несложный скрипт, найденный на просторах интернета.

Скрипт обходит оборудование через телнет, вносит изменения и записывает в лог репорт об успешной или не успешной операции. В этом сценарии вижу только одну проблему- телнет. Думаю что если у кого-то возникнет желание, он легко сможет переделать скрипт под SSH.

В отдельном файле RTR_LIST должны быть перечислены IP адреса оборудования к которому будет подключаться скрипт. Каждый адрес с новой строки.


root@zb:/home/user/scripts# more RTR_LIST
10.41.1.33
10.41.1.81
10.41.1.1
10.61.1.193
10.41.0.161
10.41.0.129
10.41.0.145
10.61.2.17
10.51.3.81
10.61.1.241
10.61.1.209
10.41.0.81
....
и т.д

 Сам скрипт

#!/usr/bin/expect
set workingdir /home/user/scripts
#
puts stdout "Enter user name:"
gets stdin userid
system stty -echo
puts stdout "Enter login password:"
gets stdin vtypasswd
puts stdout "\nEnter enable password:"
gets stdin enablepwd
system stty echo
set RTR [open "$workingdir/RTR_LIST" r]
set LOG [open "$workingdir/RESULT" w]
while {[gets $RTR router] != -1} {
if {[ string range $router 0 0 ] != "#"} {
set timeout 10
spawn telnet; expect "telnet>"; send "open $router\n"
expect {
{Username} { send "$userid\r"
expect {
{*Password*} { send "$vtypasswd\r" }
}
}
{Password} { send "$vtypasswd\r" }
timeout { puts $LOG "$router - telnet failed"
close; wait; continue
}
}
expect {
{Password} { puts $LOG "$router - vty login failed"
close; wait; continue
}
{Username} { puts $LOG "$router - vty login failed"
close; wait; continue
}
{*#} { puts $LOG "$router - vty login ok" }
timeout { puts $LOG "$router - vty login failed"
close; wait; continue
}
}
send "conf t\r"
send "ip dhcp pool LAN\r"
send "dns-server 10.71.21.200 10.71.11.200\r"


send "end\r"
send "\r"
send "copy running-config startup-config\r\r\r"
expect {
{OK} { puts $LOG "$router - config saved"}
timeout { puts $LOG "$router - config failed"
close; wait; continue }
}
#CMDs
send "exit\r"; close; wait
}
}close $RTR; close $LOG


Вносимые изменения в данном примере это две команды. Важно не забыть перенос в конце строк \r


send "ip dhcp pool LAN\r"
send "dns-server 10.71.21.200 10.71.11.200\r"


После запуска ./rtrchg.exp остается только ввести логин, пароль и идти пить кофе.

После того как скрипт отработает можно посмотреть репорт по неудачным попыткам:

root@zb:/home/user/scripts# cat RESULT | grep failed
10.52.32.65 - telnet failed
10.52.32.81 - telnet failed
10.41.1.65 - telnet failed
10.51.67.113 - telnet failed