Shell脚本成功telnet登录,之后如何发出命令?

Posted

技术标签:

【中文标题】Shell脚本成功telnet登录,之后如何发出命令?【英文标题】:Shell script successful telnet login, how to issue commands after that? 【发布时间】:2012-06-24 07:37:31 【问题描述】:
#!/usr/bin/expect -f
spawn telnet 10.21.0.17
expect -re "login"
send "admin\n"
expect -re "Password"
send "supersecurepassword\n"
interact

按预期工作。运行脚本后,我登录到我在spawn telnet 10.21.0.17 行中使用的任何远程 IP

然后它把我丢到 AP 的外壳上

WAP->

如何发出更多命令?我想发出reboot,然后可能是sleep 20,最后是exit

我尝试过使用echoexpect,但没有成功。我也尝试过删除interact,但没有成功。有什么想法吗?

【问题讨论】:

为什么不send,就像您为用户名和密码所做的那样?我很困惑.. 对不起,我也试过了。我忘了提。 echo send expectsend 什么都不做。让我留在 WAP--> 提示符处。 如下面的解决方案所示,使用了send 命令,但问题是我在第一个shell 命令之前需要一个sleep。感谢您的快速评论,不过......总是很感激。 另外,interact 不会被使用,因为那会等待用户交互:***.com/questions/7789710/… 【参考方案1】:

只需在expect 之前添加sleep 即可解决此问题,当然还有not including interact,以下效果很好:

#!/usr/bin/expect -f
spawn telnet 10.21.0.17
expect -re "login"
send "admin\n"
expect -re "Password"
send "supersecurepassword\n"
sleep 5
expect "WAP"
send "reboot\n"
send "exit\n"

作为参考,这用于自动重启 D-Link DAP-2590 无线接入点。既然我知道了这一点,我可能会将它用于其他事情:更改密码等。希望它在未来对其他人有所帮助。

【讨论】:

为什么在expect之前在这个脚本中需要sleep命令?

以上是关于Shell脚本成功telnet登录,之后如何发出命令?的主要内容,如果未能解决你的问题,请参考以下文章

如何在shell脚本中,判断一个基本命令执行是不是成功

telnet登录路由器启动服务的shell脚本

从 shell 脚本生成交互式 telnet 会话

Telnet 从守护进程运行时无法正常运行

写一个shell脚本来telnet一个http网站?

如何在 Shell 脚本的变量中捕获 telnet 命令的输出