ожидать сценарий + как игнорировать строки, если не появляется - PullRequest
6 голосов
/ 11 января 2012

Я пишу следующий ожидаемый скрипт для автоматизации входа по ssh на удаленную Linux-машину. И выполните команду "cat /etc/APP_VERSION.txt file"

Иногда я не спрашивал команду ssh о -

    "Are you sure you want to continue connecting (yes/no)?"

Так что в этом случае первое ожидание все еще ожидает строку "(да / нет)?" -: (

И не переходите ко второму ожиданию - «пароль:»?

Как решить эту проблему?

Я имею в виду, если строка "Вы уверены, что хотите продолжить соединение (да / нет)?" Не появляется из SSH

Тогда мы должны перейти к следующему ожидаемому «паролю», но как это сделать?

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

Примечание2 - Я не могу использовать положительное значение тайм-аута (как тайм-аут 10), потому что сам ssh имеет задержку

. , , .

Мой сценарий ожидания: (это ожидание является частью моего сценария ksh)

  .
  .
  .

  APP_MACHINE=172.12.6.190  


  set timeout -1
  spawn  ssh $APP_MACHINE  
       expect {
                "(Are you sure you want to continue connecting yes/no)?" 
                              { send "yes\r" }
              }
       expect password:        {send PASS123\r}
     expect >  {send "cat /etc/APP_VERSION.txt\r"}
   expect >    {send exit\r}
  expect eof

 .
 .
 .

. , , , .

пример ssh с моей машины linux

  ssh APP_MACHINE
  The authenticity of host 'APP_MACHINE (172.12.6.190 )' can't be established.
  RSA key fingerprint is 1e:8a:3d:b3:e2:8c:f6:d6:1b:16:65:64:23:95:19:7b.
  Are you sure you want to continue connecting (yes/no)?

Ответы [ 3 ]

8 голосов
/ 11 января 2012

Установить тайм-аут

установить время ожидания 10

Будет ожидать ожидаемую строку в течение 10 секунд, а затем перейдет к следующей строке в сценарии, если не получена в течение указанного времени ожидания.

Ссылка http://linuxshellaccount.blogspot.com/2008/01/taking-look-at-expect-on-linux-and-unix.html

UPDATE: Если тайм-аут не является приемлемым решением, вы можете попробовать использовать список альтернативных ответов для продвижения сценария.

expect {
 "(Are you sure you want to continue connecting yes/no)?" { send "yes\r"; exp_continue }
 password:                                                {send PASS123\r; exp_continue}
}
7 голосов
/ 20 февраля 2012

Когда вы создаете SSH, сделайте следующее:

spawn ssh -o "StrictHostKeyChecking no" "$user\@ip"
0 голосов
/ 11 января 2012

Вы можете использовать модуль pexpect для Python, чтобы сделать это, поскольку он может предоставить вам что-то вроде case :)

Для получения более подробной информации см .: http://linux.byexamples.com/archives/346/python-how-to-access-ssh-with-pexpect/

...