Bash Expect Telnet:处理服务器关闭的过早连接

Posted

技术标签:

【中文标题】Bash Expect Telnet:处理服务器关闭的过早连接【英文标题】:Bash Expect Telnet: handle premature connection close by server 【发布时间】:2020-08-13 21:55:43 【问题描述】:

今天的问题是:

如果我有一个期望脚本,它只是自动化一些基本的 telnet 操作,但有时服务器“坏行为”并关闭 连接我可以处理它并避免等待一些超时 发生了吗?

一些规格: 当连接被服务器断开时,我在控制台上打印的字符串是经典的“连接被外部主机关闭”。

expect telnet 自动化必须发送的操作如下:

认证阶段:

    ←等待提示

    → 发送用户名

    ←等待密码

    → 发送密码

    ←等待提示

命令和输出阶段:

    →发送一个命令字符串(一般很简单的一个字:“电压”、“温度”)

    ← 等待整个输出一般要等到下一个提示才行。 (输出包含许多符号和变量值,因此等待提示似乎是一个不错的策略。)

连接关闭阶段:

    → 发送“退出”命令

    ← 等待合法“连接被外部主机关闭。”

注意:

“连接被外部主机关闭。”可以在任何时刻发生,例如在任何阶段。详细地说,我有兴趣了解在等待连接终止的提示或输出(步骤 1、3、5、7)时是否可以解决此问题。

向大家致以最诚挚的问候,并感谢愿意提供帮助的人! 保持安全, 卢卡

【问题讨论】:

【参考方案1】:

在生成之后,您可以设置一个 expect_before 命令(一次),该命令将在您的脚本每次执行 expect 时执行。例如

expect_before "Connection closed"  send_user "Unexpected close" ; exit 1 

见example

【讨论】:

哦,太好了!又好又顺。我会试一试!感谢您的回答。

以上是关于Bash Expect Telnet:处理服务器关闭的过早连接的主要内容,如果未能解决你的问题,请参考以下文章

Telnet/Send/Expect - 自动从远程主机拉取日志

通过 Bash 脚本通过 Telnet 发送命令

抑制 bash 中 telnet 的输出

无法在 bash 脚本期望中发送长命令

Bash 和期望:无法通过 telnet 重新启动路由器

如何使用empty与telnet交互