Я знаю про Kron, но якобы нет возможности запускать глобальные команды конфигурации:
http://www.techrepublic.com/article/schedule-commands-with-cisco-ios-kron/
Если я подключаюсь с помощью Putty, Putty может запускать несколько команд после входа в систему, и это работает как шарм. Дело в том, что я хочу автоматически включать коммутатор каждую ночь в 23:00 и отключать ряд интерфейсов.
Я пытаюсь использовать sshpass, но, похоже, разрешает только 1 команду за раз.
Существует также способ входа в коммутаторы cisco без пароля, но начиная с IOS 15.0:
https://www.m00nie.com/2010/12/password-less-ssh-login-using-pki-to-cisco-ios/
Хорошо, я нашел это:
/ usr / local / bin / sshpass -p пароль ssh admin@1.1.1.1 <ios-cmds.txt
где ios-cmds.txt содержит все команды в отдельных строках, как если бы я вводил их последовательно.
Также один из моих коллег предложил использовать команду linux:
expect
РЕДАКТИРОВАТЬ: нужно быть осторожным, если сеанс SSH никогда не проводился, часть обмена сертификатами с переключателем приведет к сбою команды или ничего не сделает. Сначала подключитесь к коммутатору, чтобы принять сертификат вручную, а затем SSHPASS с радостью войдет в систему и выполнит команды.
РЕДАКТИРОВАТЬ 2: после комментария YBounya я закончил с этим скриптом, который в основном перебирает последовательные IP-адреса и отключает ряд интерфейсов, скрипт получает 'on' или 'off' в качестве аргумента для выполнения операции включения или выключения :
#!/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
}
Так получилось, что несколько лет назад у меня была такая же работа. Вот что я делал в то время, надеюсь, это поможет:
#!/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" }
}
Это подключает устройство IOS с IP-адресом, предоставленным в качестве аргумента. Пароли и имена пользователей жестко запрограммированы, поэтому я полагаю, вы захотите это улучшить.
На маршрутизатор отправляется команда «copy run tftp» или что-то в этом роде, но вы также можете изменить ее на все, что вам нужно.
Это было некоторое время назад, полагаю, я бы переделал, если бы мне пришлось использовать его сейчас, но это может быть хорошей базой для начала.
Привет,