当Linux机器的IP IP登录后询问密码时,以下期望脚本正常工作
但是在某些情况下,某些Linux机器不需要ssh的密码(我们可以在没有密码的情况下登录),
所以我需要更改我的期望脚本以支持没有密码的机器
请建议如何使用我的期望脚本以支持带密码的机器和没有密码的机器
* target of the following expect script is to check the hostname on remote Linux machine
expect_test=`cat << EOF
set timeout -1
spawn ssh $IP hostname
expect {
")?" { send "yes\r" ; exp_continue }
word: {send "pass123\r" }
}
expect eof
EOF`
expect -c "$expect_test"
远程机器上的exe示例(带密码)(远程机器名称 - Linux1_machine)
IP=10.17.18.6
expect -c "$expect_test"
spawn ssh 10.17.18.6 hostname
sh: /usr/local/bin/stty: not found
This computer system, including all related equipment, networks and network devices (specifically including Internet access),is pros
yes
Password:
Linux1_machine
示例当我们在不需要登录密码的机器上执行expect脚本时
IP=10.10.92.26
expect -c "$expect_test"
spawn ssh 10.10.92.26 hostname
sh: /usr/local/bin/stty: not found
Linux15_machine
expect: spawn id exp5 not open
while executing
"expect eof"
答案 0 :(得分:2)
你有几个选择。
如果您知道服务器的内容,您不必登录(例如会话直接进入提示),然后添加一个expect语句:
expect {
")?" { send "yes\r" ; exp_continue }
word: {send "pass123\r" }
"prompt" { do something }
}
如果您没有一致的提示,可以try using a Regular Expression检测各种提示:
set prompt “(%|#|\\$) $” ;# default prompt
expect {
")?" { send "yes\r" ; exp_continue }
word: {send "pass123\r" }
-re $prompt { do something }
}
如果你根本不知道你会得到什么(似乎不太可能),那么你也可以在Expect超时时添加一个动作。
expect {
")?" { send "yes\r" ; exp_continue }
word: {send "pass123\r" }
timeout { do something }
}
,当它没有收到其他预期的行时,它将允许移动。
有关您要执行的操作的具体示例,请参阅http://wiki.tcl.tk/11583。此外,Getting Started with Expect chapter from the Oreilly book值得一读。