我很接近完成一个Tcl / Tk应用程序,通过串行连接(RS232}登录到思科接入点,并赋予它一个IP地址(很基本的)
不过,我想我的脚本试图二级密码,如果第一个失败
这是思科CLI如何与串行连接的行为,当输入了不正确的密码3次(无需用户名,只提示输入密码)
Password:
Password:
Password:
% Bad secrets
同样,如果“思科”的默认密码不工作,我需要的脚本来尝试“Cisco2”的二级密码
以下是我最近在这个问题不成功的尝试。
expect "*>" {send "en\r"}
expect {
"Password:" {send "Cisco\r"; exp_continue}
"Password:" {send "Cisco2\r"; exp_continue}
}
expect "*#" {send "config t\r"}
先谢谢您的帮助。
最简单的方法是有密码的清单,试图您逐步完成:
set passwords {"Cisco" "Cisco2"}
set idx 0
expect "*>"
send "en\r"
expect {
"Password:" {
send "[lindex $passwords $idx]\r"
incr idx
exp_continue; # Continue to wait for the "after" prompt
}
"*#" {send "config t\r"}
}
诀窍是,你必须也 expect
自带之后,让你不依傍超时或诸如此类的东西。 (好吧,假设你不想超时。如果这样做,请便!)这是因为expect
其所有比赛同时子句等待。 在你的bug的代码,你有两个子句具有相同匹配的文本,所以它总是挑选他们的第一(IIRC,如果在当前点多条款的比赛,第一个可能的分支是一个选择)。
文章来源: TCL / Expect Scripting - Using a conditional statement to attempt a secondary login password