2012-06-12 70 views
1

我做了expect/bash腳本來檢索思科設備配置;它很簡單複製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 }