2013-12-18 4 views
2

Я новичок в ожидании скриптов.Обработать несколько операторов в сценарии ожиданий

Я написал сценарий ожидания для ssh в Linux-машине, где я столкнулся с проблемой в sshing на разных машинах linux.Below Я скопировал скрипт.

!/usr/local/bin/expect 

set LinuxMachine [lindex $argv 0] 

spawn ssh [email protected]$LinuxMachine 


expect "[email protected]$LinuxMachine's password:" 

send "root123\n" 

expect "[[email protected]_FC12_172_85 ~]#" 

send "ls" 

interact 

Когда я поставляю 10.213.172.85 из командной строки ожидать в 4-е строки, она читается как «[email protected]'s password:» и логинов успешно

Но некоторый линукс будет Expect-

The authenticity of host '10.213.172.108 (10.213.172.108)' can't be established. 
RSA key fingerprint is da:d0:a0:e1:d8:7a:23:8b:c7:d8:40:8c:b2:b2:9b:95. 
Are you sure you want to continue connecting (yes/no) 

В этом сценарий сценария не будет работать.

Пожалуйста, дайте мне знать, как можно использовать два оператора ожидания в одной команде ожидания.

Спасибо заранее!

ответ

7

Вы можете использовать exp_continue в таком случае:

expect { 
     "Are you sure you want to continue connecting (yes/no)" { 
      send "yes\r" 
      exp_continue 
     } 
     "[email protected]$LinuxMachine's password:" { 
      send "root123\r" 
      expect "[[email protected]_FC12_172_85 ~]#" 
      send "ls\r" 
      interact 
     } 
} 

В выше, ожидает блок ждет либо да/нет вопроса или ответ на запрос на пароль. Если последний, он переходит с предоставлением пароля, ожидая приглашения, отправляет команду ls и дает управление обратно. Если первый, он ответит «да» и повторит блок ожидания, готовый найти подсказку для пароля (или даже вопрос «да/нет», если уж на то пошло - не то, что вам это понадобится).

Я бы также включил некоторые таймауты со значимыми сообщениями в случае, если какой-либо вариант ожидания не соответствует ожидаемому, но вышеприведенное должно работать.

В качестве побочного комментария вы не хотите устанавливать пароль root в скрипт ... Я рекомендую использовать проверку ключа ssh.

Сообщите мне, как это.

0

Нам нравится называть это «длинный лог в», есть SSH варианты, которые не проверяют ключи хостов:

send -- "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no [email protected]\n" 
expect { 
     "Password" { 
       send -- "$passwd\n" 
     } 

Часть из Баш скрипт, который вызывает на ожидают устанавливает пароль:

echo -n "Enter LDAP password: " 
read -s passwd 
echo 
Смежные вопросы