ожидать сценарий + ожидать пропустить строку отправки + задержка выпуска - PullRequest
0 голосов
/ 24 февраля 2012

Я пишу сценарий active.ksh (на основе ожидаемого), чтобы автоматически войти в систему на какой-либо машине Solaris и выполнить команду hostname (войти на виртуальный IP-адрес, чтобы проверить, какое имя хоста является активной машиной - у меня есть два кластера Solarisмашины)

Проблема с , ожидаем ;Ожидается, что отправляет строку пароля (pass123), и он пропускает вопрос о пароле, и он все еще ждет пароль.

Таким образом, фактически пароль (pass123) был введен после вопроса о пароле.В большинстве случаев ожидаемый сценарий работает нормально, но иногда он пропускает пароль.

ПРИМЕР ПРОБЛЕМЫ

 ./active.ksh
 spawn ssh 10.10.18.61
 sh: /usr/local/bin/stty: not found
 This computer system, including all related equipment, networks and network devices      (specifically including Internet access),is provided only for authorized uss
 Password:        * my remark - pass123 string was missed the Password Question        pass123
 Password: 

СКРИПТ

  more active.ksh  



  #!/bin/ksh

  VIP_ADDRESS=10.10.18.61


  expect_for_verify_which_active_machine=`cat << EOF
  set timeout -1
  spawn  ssh   $VIP_ADDRESS 
  expect {
  ")?"   { send "yes\r"  ; exp_continue  }
  Password:  {send "pass123\r"}
  }
  expect >  {send "hostname\r"}
  expect >    {send exit\r}
  expect eof
  EOF`


  expect -c  "$expect_for_verify_which_active_machine"

ПРИМЕР ПРАВИЛЬНЫХ РЕЗУЛЬТАТОВ

  ./active.ksh 
  [Friday, February 24, 2012  2:32:06 PM IST] INFO Verify which is active SMU machine 
  spawn ssh 10.10.18.61
  sh: /usr/local/bin/stty: not found
  This computer system, including all related equipment, networks and network devices       (specifically including Internet access),is provided only for authorized uss
  yes
  Password: 
  Last login: Fri Feb 24 14:32:06 2012 from smu1a
  This computer system, including all related equipment, networks and network devices       (specifically including Internet access),is provided only for authorized uss
  solaris1:/ ROOT > hostname
  solaris1
  solaris1:/ ROOT > exit

  logout
  Connection to 10.10.18.61  closed.

1 Ответ

0 голосов
/ 29 февраля 2012

Возможно, будет проще написать скрипт для этого процесса, используя empty .Это небольшая утилита, похожая на ожидаемую, но более удобная в некоторых случаях.Вы можете использовать его только для «ввода текста в приложение» и игнорировать подсказки приложения (хотя это не обязательно).Вход на удаленный компьютер и выполнение hostname может выглядеть следующим образом:

./empty -f -L templog ssh 10.10.18.61 hostname
echo YOUR_SECRET_PASSWORD | ./empty -s -c
cat templog

Первый запускает вашу команду в фоновом режиме.Другой отправляет ему данные (ваш пароль) со стандартного ввода.Весь сеанс (включая пароли!) Записывается в файл templog, где вы также найдете результат hostname.Существуют также механизмы для более тонкого контроля, но их может быть немного сложнее настроить.

Как уже отмечали некоторые люди, ssh-ключи - это путь, это просто уродливый и небезопасный обход(это рискованно из-за сохранения истории оболочки, пользователи могут видеть ваш пароль в результатах ps, и в моем примере пароль дополнительно сохраняется в templog file и т. д.).

...