期望脚本自动进行 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 登录的主要内容,如果未能解决你的问题,请参考以下文章