【发布时间】:2011-08-21 01:36:13
【问题描述】:
我正在使用 Telnet 向 Mikrotik 路由器发送命令。
telnet 192.168.100.100 -l admin
Password: pass1234
[admin@ZYMMA] > /interface pppoe-server remove [find user=aspeed13]
[admin@ZYMMA] > quit
效果很好。
现在我想使用 expect tcl 脚本来自动化它:
#!/usr/bin/expect --
spawn telnet 192.168.100.100
expect "Login:"
send "admin\r"
expect "Password:"
send "pass1234\r"
expect "\[admin@ZYMMA\] >"
send "/interface pppoe-server remove \[find user=aspeed13\]\r"
expect "\[admin@ZYMMA\] >"
send "quit\r"
它可以工作,但在身份验证后(第 6 行:send "pass1234\r"),当路由器 CLI 加载时,它会冻结约 10 秒,并带有以下字符 ^[[?6c^[[24;3R
然后脚本运行正常。
我的问题是为什么 Telnet 在手动访问时加载速度很快,而通过期望脚本访问时需要太多时间?我在有关 telnet 自动化的论坛上读到,他们说 telnet 很慢,但是由于手动速度太快,为什么要花时间加载期望?
【问题讨论】:
-
expect是tcl,而不是bash -
如果将下一行
expect替换为expect -re ">"是否有效? -
感谢 ninjalj 的更正。
-
关于用 expect -re ">" 替换下一行我试过了,但是脚本停止了,它一直等到超时。还有其他建议吗?
-
将
exp_internal 1添加到脚本的顶部以查看 expect 是如何尝试匹配的
标签: authentication tcl telnet expect