LINUX.ORG.RU

помогите пожалуйста с expect


0

1

Доброе утро. Вот есть такой скрипт:

#!/usr/bin/expect -f

spawn ssh 10.0.10.11

expect «*?assword:*»

send «crtc\r»

expect eof

sleep 20

expect «#»

send «poweroff\r»

из него понятно, что я хочу с помощью expect зайти по ssh на удаленный комп и подставить пароль. Сразу скажу, вопрос безопасности не рассматривается.Дело в том, что на комп я захожу, но спустя 20 сек соединение закрывается и никакая команда не выполняется. Подскажите пожалуйста, как сделать так с expect, чтоб соединение не терялось и после того как я зашел, выполнялись команды. Вообще стоит задача зайти на комп по телнету, подставив логин и пароль, и откорректировать время командой date.

Ответ на: комментарий от val-amart

строками

expect «#»

send «poweroff\r»

я не ожидаю промт? подскажите как правильно сделать?

dimitry80 ()

Сгенерировать скрипт с помощью autoexpect, удалить лишнее.

TuxR ★★★★ ()
#!/usr/bin/expect -f
set password "password"
spawn ssh username@ipaddr
expect {
  "> " { }
  "$ " { }
  "assword: " {
        send "$password\r"
        expect {
          "> " { }
         "$ " { }
        }
  }       
send "yes\n"
        expect {
          "> " { }
          "$ " { }
        }
  }
 default {
        username "Login failed\n"
        exit
  }
}
send "sudo poweroff"
   expect {
      "> " { }
      "$ " { }
      "assword: " {
         send "$password\n"
          expect {
          "> " { }
          "$ " { }
        }
    }
Dob ()
Ответ на: комментарий от Dob

Спасибо всем. Задачу выполнения команд на удаленной машине решил. Теперь вопрос, как-то можно скрестить expect с Bash-ем. Например, надо по команде date узнать дату и подставить ее. Чтоб не объяснять на словах приведу примерный скрипт:

#!/usr/bin/expect -f

spawn telnet 10.0.10.11

expect «login:*»

send «dmitry\r»

expect «Password»

send «crtc\r»

expect «~$»

send «su\r»

expect «Пароль»

send «crtc\r»

expect «#»

send «date 01102348\r»

expect «#»

send «exit\r»

expect «~$»

send «exit\r»

Вот вместо date 01102348 подставить дату которую надо взять с той машины, на которой запускаем этот скрипт.

dimitry80 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.