使用Expect的Telnet自动化:身份验证速度慢吗? [英] Telnet Automation with Expect: Slow authentication?

查看:32
本文介绍了使用Expect的Telnet自动化:身份验证速度慢吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用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
"
expect "Password:"
send "pass1234
"
expect "[admin@ZYMMA] >"
send "/interface pppoe-server remove [find user=aspeed13]
"
expect "[admin@ZYMMA] >"
send "quit
"
它可以工作,但在验证之后(第6行:send "pass1234 "),当路由器CLI加载它时,它会冻结约10秒,并显示以下字符^[[?6c^[[24;3R 然后脚本运行正常。

我的问题是,为什么手动访问Telnet时加载速度很快,而通过Expect脚本访问时需要太多时间?我在论坛上看到关于telnet自动化的文章,他们说telnet很慢,但是既然手动加载太快了,为什么用Expect加载需要时间?

推荐答案

您看到的是终端协商产生的反馈,这是因为您不是在真正的终端中运行。(严格地说,您是--这是Expect的魔力--但它的行为与普通终端不同。)

最简单的修复方法是在派生telnet会话之前将终端设置为其他值,例如:

#!/usr/bin/expect --
set env(TERM) dumb
spawn telnet 192.168.100.100
# Rest of your script goes here ...
或者,您可以尝试正确响应进入VT102模式的请求和光标位置报告(感觉像是做了很多工作),或者您可以重写代码,以便它在interact(它将另一端与您在其中运行的实际终端连接起来)内执行所有操作。但是,如果设置一个环境变量就可以解决它,为什么还要这么麻烦呢?

(注意:我建议在这里将终端设置为dumb,但关键是您希望使用最愚蠢的终端。哑巴终端是理想的,因为它们几乎就是完全愚蠢,所以很容易冒充它们(…)

这篇关于使用Expect的Telnet自动化:身份验证速度慢吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆