设为首页 - 加入收藏 温州站长网 (http://www.0577zz.com)-电商,营销推广,科技,建站经验,云计算,5G,大数据,站长网!
热搜: 优化 为什么 什么 站长之家
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

linux – 期望脚本期望错过发送字符串延迟问题

发布时间:2021-03-19 08:03 所属栏目:[Linux] 来源:网络整理
导读:我编写了active.ksh脚本(基于expect),以便自动登录某些Solaris机器并执行hostname命令(登录虚拟IP以验证哪个主机名是活动机器 – 我有两个集群solaris机器) 问题在于期待; expect发送密码字符串(pass123)并且它错过了密码问题,它仍然等待密码. 实际上密码

我编写了active.ksh脚本(基于expect),以便自动登录某些Solaris机器并执行hostname命令(登录虚拟IP以验证哪个主机名是活动机器 – 我有两个集群solaris机器)

问题在于期待; expect发送密码字符串(pass123)并且它错过了密码问题,它仍然等待密码.

实际上密码后输入了密码(pass123)
题.在大多数情况下,expect脚本工作正常,但有时它会丢失密码.

问题的例子

./active.ksh
 spawn ssh 10.10.18.61
 sh: /usr/local/bin/stty: not found
 This computer system,including all related equipment,networks and network devices      (specifically including Internet access),is provided only for authorized uss
 Password:        * my remark - pass123 string was missed the Password Question        pass123
 Password:

剧本

#!/bin/ksh

  VIP_ADDRESS=10.10.18.61


  expect_for_verify_which_active_machine=`cat << EOF
  set timeout -1
  spawn  ssh   $VIP_ADDRESS 
  expect {
  ")?"   { send "yes\r"  ; exp_continue  }
  Password:  {send "pass123\r"}
  }
  expect >  {send "hostname\r"}
  expect >    {send exit\r}
  expect eof
  EOF`


  expect -c  "$expect_for_verify_which_active_machine"

正确结果的例子

./active.ksh 
  [Friday,February 24,2012  2:32:06 PM IST] INFO Verify which is active SMU machine 
  spawn ssh 10.10.18.61
  sh: /usr/local/bin/stty: not found
  This computer system,networks and network devices       (specifically including Internet access),is provided only for authorized uss
  yes
  Password: 
  Last login: Fri Feb 24 14:32:06 2012 from smu1a
  This computer system,is provided only for authorized uss
  solaris1:/ ROOT > hostname
  solaris1
  solaris1:/ ROOT > exit

  logout
  Connection to 10.10.18.61  closed.

解决方法

如果您在登录期间监视字符串,您将希望避免使用“密码:”,您会发现它并不总是大写.

将你的期望改为-re“(.*)assword:”或“assword:”往往会更有效地抓住这条线.

如果你发现时间仍然太快,你可以睡一觉;在你发送之前

这就是我用来期待的东西

expect {
    "(yes/no)?" { send "yes\n" }
    "passphrase" { send "\r" }
    -re "(.*)assword:"  { sleep 1; send -- "password\r" }
    -re $prompt { return }
    timeout     { puts "un-able to login: timeout\n"; return }
    eof         { puts "Closed\n" ; return }
}

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章
热点阅读