gpt4 book ai didi

authentication - Telnet 自动化与 Expect : Slow authentication?

转载 作者:行者123 更新时间:2023-12-02 02:57:21 30 4
gpt4 key购买 nike

我正在使用 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 行:发送“pass1234\r”),当路由器 CLI 加载时,它会卡住约 10 秒,并显示以下字符 ^[[?6c ^[[24;3R然后脚本运行正常。

我的问题是,为什么 Telnet 在手动访问时加载速度很快,而在通过 Expect 脚本访问时却花费了太多时间?我在有关 telnet 自动化的论坛上读到,他们说 telnet 很慢,但由于手动速度太快,为什么需要时间来加载 Expect?

最佳答案

您所看到的是终端协商的反作用,这是因为您没有在真实终端中运行。 (严格来说,你是 - 这就是 Expect 的魔力 - 但它的行为与普通终端不同。)

最简单的修复方法是在生成 telnet session 之前将终端设置为其他内容,例如:

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

或者,您可以尝试正确响应进入 VT102 模式的请求和光标位置的报告(感觉工作量很大),或者您可以重写代码,以便它执行 interact 内的所有操作 (将另一端与您在其中运行的真实终端连接)。但如果设置一个环境变量可以解决这个问题,为什么还要这么麻烦呢?

(注意:我建议在这里将终端设置为“哑”,但关键是您需要最愚蠢的终端才能工作。哑终端是理想的选择,因为它们完全 愚蠢,很容易冒充他们……)

关于authentication - Telnet 自动化与 Expect : Slow authentication?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5926699/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com