Telnet Automation with Expect:慢认证?

时间:2011-05-08 09:44:51

标签: authentication tcl telnet expect

我正在使用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在手动访问时加载速度很快,而且通过expect脚本访问需要花费太多时间?我在论坛上读到有关telnet自动化的信息,他们说telnet速度很慢,但是由于手动速度太慢,为什么需要时间加载到期望值呢?

4 个答案:

答案 0 :(得分:2)

您所看到的是终端协商的回滚,这是因为您没有在真正的终端中运行。 (严格地说,你是 - 那是期待的魔力 - 但它并不像普通终端那样表现。)

最简单的解决方法是在产生telnet会话之前将终端设置为其他内容,例如:

#!/usr/bin/expect --
set env(TERM) dumb
spawn telnet 192.168.100.100
# Rest of your script goes here ...

或者,您可以尝试正确响应进入VT102模式的请求和光标位置的报告(这感觉就像很多工作),或者您可以重写代码以便它可以执行{{1}内的所有操作(它将另一端连接到您正在运行的真实终端)。但是,如果设置一个环境变量修复它,为什么要去那些额外的麻烦呢?

(注意:我建议在这里将终端设置为interact,但关键是你想要最愚蠢的终端。哑终端是理想的,因为它们只是完全愚蠢,让你很容易假装成他们......)

答案 1 :(得分:1)

您是否尝试使用netcat,启用了telnet仿真?

答案 2 :(得分:1)

回答有点迟 但是如果你想加速期待你的角色输入 尝试使用“autoexpect”命令生成脚本,这将保存
名为“script.exp”的文件中的交互在其中的同一目录中 你运行了命令。

例如:
cd $ HOME
autoexpect telnet 192.168.100.100
 #这里有一些telnet命令
出口

以上所有命令都将保存在〜/ script.exp中 关于Tcl,我不知道脚本是否可以通过tcl运行。

答案 3 :(得分:1)

我的回答可能为时已晚。这是“Telnet autoconfig命令”......我遇到了这个问题,并在Mikrotik Wiki上找到了这个解决方案:

在登录名后添加+ t。此开关自动检测到关闭。

实施例: 发送“admin + t \ r”

在预期登录后,它的效果很好而不是“等待cca 10秒”。

有更多“开关”的Mikrotik WiKi帮助链接: http://wiki.mikrotik.com/wiki/Manual:Console_login_process#FAQ

P.S。:对不起我的英语。