Ожидайте проблемы со скриптом

Я пытаюсь выполнить простую работу через expect. Я хочу создать ключи ssh с помощью команды «ssh-keygen» на виртуальных машинах Linux. Мой ниже ожидаемый код выглядит прямолинейным, но он не работает:

#!/usr/bin/expect

spawn ssh-keygen -t rsa
expect -exact "Enter file in which to save the key (/root/.ssh/id_rsa): "
send -- "\r"
expect -exact "Enter passphrase (empty for no passphrase): "
send -- "\r"
expect -exact "Enter same passphrase again: "
send -- "\r"

Я не хочу использовать парольную фразу. поэтому введите "\r" для действия клавиши «Ввод». Я попытался запустить этот код с "#!/usr/bin/expect -d" и обнаружил, что он никогда не соответствует строкам, которые я упомянул. что-то вроде ниже:

...
expect: does "" (spawn_id exp6) match exact string "Enter file in which to save the key (/root/.ssh/id_rsa): "? no
....

Итак, я бы предположил, что, поскольку он не может соответствовать шаблону, мой сценарий не работает. Вопрос в том, почему он не может соответствовать шаблону. Я использую "-exact", и все же он не соответствует шаблону. Я пытался поиграться с "-re", но думаю, что не очень хорошо разбираюсь в регулярных выражениях TCL.

Не могли бы вы помочь. Спасибо.


person Dheeraj Kabra    schedule 11.10.2011    source источник


Ответы (2)


Порожденная программа, вероятно, отправляет больше вывода, чем точно то, что вы пытаетесь сопоставить. Вот почему сопоставление регулярных выражений так полезно.

Попробуй это:

spawn ssh-keygen -t rsa
expect -re {Enter file in which to save the key (/root/.ssh/id_rsa): $}
send -- "\r"
expect -re {Enter passphrase (empty for no passphrase): $}
send -- "\r"
expect -re {Enter same passphrase again: $}
send -- "\r"
person glenn jackman    schedule 11.10.2011
comment
Спасибо, Гленн, вы были правы в части регулярных выражений. Это сработало для сопоставления с шаблоном, но отладка команды expect показывает, что шаблон не соответствует. Меня не волнует отладка, пока мой скрипт работает. благодарю вас. - person Dheeraj Kabra; 13.10.2011

Я полагаю, вы уходите слишком быстро. Этот работает для меня:

#!/usr/bin/expect

spawn ssh-keygen -t rsa
expect "Enter file in which to save the key (/root/.ssh/id_rsa): "
send  "\r"
expect "Enter passphrase (empty for no passphrase): "
send  "\r"
expect "Enter same passphrase again: "
send  "\r"
expect
person Dimitre Radoulov    schedule 11.10.2011
comment
Спасибо, Дмитрий, вы правы, я уходил слишком рано. Я так и не понял. Мой сценарий работает абсолютно нормально после вашего предложения и предложения Гленна. Спасибо вам обоим. - person Dheeraj Kabra; 13.10.2011