2012-06-12 7 views
1

Я создал сценарий expect/bash для получения конфигурации устройств cisco; это простая копия cisco running-configuration и сохранение ее с помощью tftp.Как я могу обрабатывать таймауты при нерестах ssh или telnet-соединений?

#!/bin/bash 
while read line; 
    do 

device=$line; 
expect << EOF 

spawn telnet $device 
expect "Username:" 
    send "username\n" 
    expect "Password:" 
    send "password\n" 
send "copy running-config tftp://192.168.244.14\r" 
expect "Address or name of remote host" 
send "\r" 
expect "Destination filename " 
send "\r" 
expect "secs" 
send "exit\r" 
close 
EOF 

done < /home/marco/Scrivania/Host.txt 

exit 0 

Моя проблема в том, что у меня есть несколько устройств, некоторые из которых настроены на прием соединений telnet, а другие - только для соединений ssh. Таким образом, в моем сценарии я бы добавил что-то вроде:

попробуйте подключиться к устройству с помощью telnet Если после 3 минут ответа нет, отмените команду «spawn telnet ...» и попробуйте подключиться с помощью ssh.

В смысле ведьм я могу это реализовать?

ответ

0

Это не самый подходящий способ для этого. Вам будет намного лучше иметь два отдельных списка: один для telnet и один для ssh. В конечном итоге это просто упрощает.

Если вы действительно настроены на то, чтобы соединение зависало и время ожидания, вы, безусловно, можете это сделать. Просто установите значение тайм-аута в секундах и действие, которое нужно предпринять, если превышен период ожидания.

Например:

spawn telnet $device 
expect -timeout 180 { 
    "Username:" {send "username\r\n"; sleep 1; send "password\r\n"} 
    timeout  { your_ssh_actions_or_proc }