TCL /期待脚本 - 使用条件语句来尝试第二次登录时的密码(TCL / Expect Script

2019-10-16 23:12发布

我很接近完成一个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"}

先谢谢您的帮助。

Answer 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所有比赛同时子句等待。 在你的bug的代码,你有两个子句具有相同匹配的文本,所以它总是挑选他们的第一(IIRC,如果在当前点多条款的比赛,第一个可能的分支是一个选择)。



文章来源: TCL / Expect Scripting - Using a conditional statement to attempt a secondary login password