当Linux机器在登录后要求输入密码时,以下期望脚本可以正常工作。但是我们的一些Linux机器不需要SSH密码(我们可以在没有密码的情况下登录),所以我需要更改expect脚本以便支持没有密码的机器。我怎么能这样做?
$ 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"
在需要密码的计算机上运行时:
$ 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
在不需要密码的计算机上运行时:
$ 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 :(得分:1)
使用此expect命令:
expect {
")?" {send "yes\r"; exp_continue}
word: {send "pass123\r"; exp_continue}
eof
}
这样,如果在“password:”之前遇到EOF,脚本将正常运行。
答案 1 :(得分:0)
将超时从-1更改为其他内容,如果期望的字符串未在给定的超时内显示,这将导致期望继续到下一行。
如果没有提示输入密码,则当前值-1会使其永久阻止。
<强>更新强>
set timeout 5
spawn ssh $IP hostname
expect {
")?" { send "yes\r" ; exp_continue }
word: {send "pass123\r" }
eof {exit}
}