1

我非常接近完成一个通过串行连接(RS232} 登录到 Cisco 接入点并为其提供 IP 地址的 TCL/TK 应用程序(非常基本)

但是,如果第一个密码失败,我希望我的脚本尝试使用辅助密码

这是在输入错误密码 3 次时 Cisco CLI 在串行连接中的行为方式(不需要用户名,仅提示输入密码)

Password:
Password:
Password:
% Bad secrets

同样,如果“Cisco”的默认密码不起作用,我需要脚本来尝试“Cisco2”的二级密码

以下是我最近在这个问题上的不成功尝试。

    expect "*>" {send "en\r"}

    expect {
    "Password:" {send "Cisco\r"; exp_continue}
    "Password:" {send "Cisco2\r"; exp_continue}
    }

    expect "*#" {send "config t\r"}

在此先感谢您的帮助。

4

1 回答 1

1

最简单的方法是有一个密码列表来尝试,您可以逐步尝试:

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等待其所有匹配子句。在您的错误代码中,您有两个具有相同匹配文本的子句,因此它总是选择其中的第一个(IIRC,如果多个子句在当前点匹配,则第一个可能的分支是选择的那个)。

于 2012-07-04T22:53:35.237 回答