Ожидайте проблемы со скриптом - PullRequest
3 голосов
/ 11 октября 2011

Я пытаюсь выполнить простую работу через ожидание. Я хочу создать ключи 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" для действия клавиши «Enter». Я попытался запустить этот код с "#!/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.

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

Ответы [ 2 ]

3 голосов
/ 11 октября 2011

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

Попробуйте:

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"
2 голосов
/ 11 октября 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
...