Ожидать + как определить, если ожидать перерыва, потому что время ожидания?
Цель следующего простого ожидаемого сценария - получить имя хоста на удаленном компьютере.
Иногда ожидается, что сценарий не сможет выполнить ssh до $IP_ADDRESS (поскольку удаленный компьютер не активен и т. Д.)
так что в этом случае ожидаемый сценарий сломается через 10 секунд (тайм-аут 10), это нормально, но......
Есть два варианта
- Ожидается, что сценарий успешно выполнит ssh и выполнил команду hostname на удаленном компьютере.
- Ожидание перерыва в работе скрипта, поскольку время ожидания составляет 10 секунд
В обоих случаях ожидаем выхода
- в случае успешного ssh ожидаем, что он сломается через 0,5-1 секунду, но в случае плохого ssh, он сломается через 10 секунд
но я не знаю, ожидают ли сценарий выполнения SSH успешно или нет?
Можно ли определить процесс тайм-аута? или чтобы убедиться, что ожидание закончилось из-за тайм-аута?
Отметьте мою версию для Linux - red-hat 5.1
Ожидайте сценарий
[TestLinux]# get_host_name_on_remote_machine=`cat << EOF
> set timeout 10
> spawn ssh $IP_ADDRESS
> expect {
> ")?" { send "yes\r" ; exp_continue }
>
> word: {send $PASS\r}
> }
> expect > {send "hostname\r"}
> expect > {send exit\r}
> expect eof
> EOF`
Пример, если у нас нет связи с удаленным хостом
[TestLinux]# expect -c "$get_host_name_on_remote_machine"
spawn ssh 10.17.180.23
[TestLinux]# echo $?
0
2 ответа
Вы можете ожидать тайм-аут, для некоторых версий требуется -timeout, как и -regex, для проверки вызова timeout.
Вы ожидаете, что заявление может стать
expect {
")?" { send "yes\r" ; exp_continue }
word: { send $PASS\r}
timeout { puts "failed to SSH" }
}
Я знаю, что это не совсем то, что вы просили, но я хотел бы предложить альтернативу. Используйте ключи ssh вместо паролей и сценарии bash вместо Expect:
output=$(ssh -o ConnectTimeout=10 -o BatchMode=yes -o StrictHostKeyChecking=no $IP_ADDRESS "hostname")
if [ $? -eq 255 ]; then
# Some error occured while attempting to connect.
else
# Success!
fi
Это явно не говорит о том, что был тайм-аут против неудачного входа в систему с закрытым ключом и т. Д., Но это лучше, чем писать Expect.