期望脚本自动进行 telnet 登录

Posted

技术标签:

【中文标题】期望脚本自动进行 telnet 登录【英文标题】:expect script to automate telnet login 【发布时间】:2011-12-09 00:52:09 【问题描述】:

我一直在尝试创建一个期望脚本以通过 telnet 自动登录到我的设备

如果expect命令没有多种可能,脚本工作正常,登录设备。

#!/usr/bin/expect
set timeout 20
set ip [lindex $argv 0]
set port [lindex $argv 1]
set user [lindex $argv 2]
set password [lindex $argv 3]

spawn telnet $ip $port
expect "'^]'." sleep .1;
send "\r";
sleep .1;
expect   "login:"
send "$user\r"
expect "Password:"
send "$password\r";
interact

当我传递正确的参数时,上面的脚本工作正常并成功登录。但是一旦我向期望命令添加了额外的分支(用于错误处理),脚本就会卡在login: 提示符处。一段时间后它会打印Script Error 有什么帮助吗??下面是错误的脚本。

#!/usr/bin/expect
set timeout 20
set ip [lindex $argv 0]
set port [lindex $argv 1]
set user [lindex $argv 2]
set password [lindex $argv 3]

spawn telnet $ip $port
expect "'^]'."
sleep .1;
send "\r";
expect

  "login:"
  
        send "$user\r"
        expect "Password:"
        send "$password\r";
        interact

  

  "host: Connection refused"
  
    send_user "ERROR:EXITING!"
    exit
  


PS:此脚本将进一步开发,以等待其他提示在设备上加载不同的构建映像。只有 telnet(console) 连接有效。所以 ssh 不是一个选择。

【问题讨论】:

愿意分享您在登录后是如何完成传递附加命令的吗?我无法克服这个障碍:***.com/questions/11148832/… 如果您正在谈论通过脚本在 shell 中自动执行其他命令。你应该使用发送命令。互动将球传给用户。从您发布的问题中,我看到您已经得到了答案。 :) 期待胜利.. @woodstok 的“发送”命令是什么?我没有看到它如何与 telnet 自动化联系起来。 wiki.tcl-lang.org/page/send 【参考方案1】:

我的错。 问题出在花括号上。它们应该与期望命令在同一行。

【讨论】:

【参考方案2】:

这是一个使用expect实现telnet自动登录的脚本。我刚试过,真的很管用。

#!/usr/bin/expect -f
if [llength $argv] < 1 
    puts "Usage: ./telnet.sh host";
    exit 1;

set timeout 10
set host [lindex $argv 0]
set user "my_user"
set password "my_password"
spawn telnet -l $user $host
expect 
    "?ser*" 
        send "$user\n"
        exp_continue
    
    "?ogin*" 
        send "$user\n"
        exp_continue
    
    "?assword*" 
        send "$password\n"
        interact
        exit 0;
    

exit 1

链接:https://www.oueta.com/linux/telnet-auto-login-on-linux-and-unix-with-expect/

【讨论】:

以上是关于期望脚本自动进行 telnet 登录的主要内容,如果未能解决你的问题,请参考以下文章

在期望脚本中通过 ssh/telnet(甚至是 shell)传输二进制数据时出错

在启动的 telnet 会话中使用期望脚本

从期望脚本导出数据

在“期望”中使用条件语句

在期望中终止生成会话

如何切换 Tcl 交互并期望 telnet 自动化?