Я новичок в этом сообществе, а также в программировании. В настоящее время я работаю над простым сценарием Expect, который считывает файл со списком DNS-имен S SH в маршрутизатор Cisco и выполняет простую команду «show ip intrief».
Этот список содержит некоторые хосты, которые в данный момент недоступны, поэтому я пытаюсь заставить сценарий отключить это недостижимое устройство, но продолжить работу с остальными устройствами.
Когда я запускаю сценарий, он может S SH подключиться к первому устройству и выполнить команду «show». Однако когда он достигает второго устройства (которое недоступно), он зависает там примерно на 30 секунд, а затем завершает сценарий. Я не уверен, что делаю не так. Будем очень благодарны любой помощи.
#!/usr/bin/expect
#
#
set workingdir cisco/rtr
puts stdout "Enter TACACS Username:"
gets stdin tacuserid
system stty -echo
puts stdout "Enter TACACS password:"
gets stdin tacpswd
puts stdout "\nEnter enable password:"
gets stdin enabpswd
system stty echo
#
set RTR [open "$workingdir/IP-List.txt" r]
set timestamp [timestamp -format %Y-%m-%d_%H:%M]
#
while {[gets $RTR dnsname] != -1} {
if {[ string range $dnsname 0 0 ] != "#"} {
send_user "The value of the router name is $dnsname\n"
set timeout 10
set count 0
log_file -a -noappend $workingdir/session_$dnsname\_$timestamp.log
send_log "### /START-SSH-SESSION/ IP: $dnsname @ [exec date] ###\n"
spawn ssh -o StrictHostKeyChecking=no -l $tacuserid $dnsname
expect {
"TACACS Password: " {send "$tacpswd\r"}
timeout {puts "$dnsname - failed to login"; wait;close;exp_continue}
}
expect {
{>} {send "enable\r"; send_user "on the second expect\n"}
}
expect {
{assword: } {send "$enabpswd\r"}
}
#
expect {
"#" {send "show ip int brief\r"}
}
#expect "#"
send "exit\r"
send_log "\n"
send_log "### /END-SSH-SESSION/ IP: $dnsname @ [exec date] ###\n"
log_file
}
}
exit