«команда не найдена» ошибки в ожидаемом сценарии, выполняемом сценарием оболочки - PullRequest
3 голосов
/ 06 января 2011

Я пытаюсь реализовать «сценарий ожидания вызова сценария оболочки», чтобы он не запрашивал каждый раз ввод пароля ssh.Я начал с Используя значение переменной в качестве пароля для scp, ssh и т. Д. Вместо того, чтобы каждый раз запрашивать пользовательский ввод , и понял, что у меня должен быть файл .sh и файл .exp.В моей системе установлено expect (при запуске expect -v отображается expect version 5.43.0).

В моем файле upload-to-server.sh у меня есть

cd $SOURCE_PATH/shell
./password.exp $DESTINATION_PATH $SSH_CREDENTIALS $PROJECT_INSTALLATION_PATH $PASSWORD

И в моем файле password.exp у меня есть

#!/usr/bin/expect -f

set DESTINATION_PATH [lindex $argv 0];
set SSH_CREDENTIALS [lindex $argv 1];
set PROJECT_INSTALLATION_PATH [lindex $argv 2];
set PASSWORD [lindex $argv 3];

spawn scp $DESTINATION_PATH/exam.tar $SSH_CREDENTIALS':/'$PROJECT_INSTALLATION_PATH
expect "password:"
send $PASSWORD"\n";
interact

При запуске файла upload-to-server.sh я получаюследующая ошибка -

./password.exp: line 9: spawn: command not found
couldn't read file "password:": no such file or directory
./password.exp: line 11: send: command not found
./password.exp: line 12: interact: command not found

Я пришел к вышеуказанному коду (в файле exp) из нескольких источников (не разбираясь в основах).В одном источнике код выглядит следующим образом

#!/usr/local/bin/expect
spawn  sftp  -b cmdFile user@yourserver.com
expect "password:"
send "shhh!\n";
interact

В то время как в другом источнике этот код

#!/usr/local/bin/expect -f
set TESTCASE_HOME [lindex $argv 0];
set TESTCASE_LIST [lindex $argv 1];
set PASSWORD [lindex $argv 3];

set timeout 200
spawn $TESTCASE_HOME/dobrt -p $TESTCASE_HOME/$TESTCASE_LIST
expect "*?assword:*" {send -- "$PASSWORD\r";}
expect eof

Там есть некоторые отличия -

  • есть дополнительная -f в строке #!/usr/local/bin/expect
  • Ожидайте "? Assword: " {send - "$ PASSWORD\ r ";} отличается от expect "password:" send "shhh!\n";

  • interact заменено на expect eof.

Это мой первый expect script так что понятия не имею, что кодировать.Любые указатели?

Спасибо,
Sandeepan

Ответы [ 2 ]

1 голос
/ 06 января 2011

Не делай этого!Вы должны использовать аутентификацию с открытым ключом, как указано в комментарии выше.То, как вы идете, оставляет пароли в открытом виде и хрупко.

Аутентификация с открытым ключом намного проще в настройке, например: инструкции по установке

0 голосов
/ 06 января 2011

Вы уверены, что делаете

./script.exp

А не

. ./script.exp

??В последнем случае оболочка пытается интерпретировать ожидаемую программу.

Полностью согласен с тем, что ssh-ключи являются правильным решением.

...