Я пытаюсь реализовать «сценарий ожидания вызова сценария оболочки», чтобы он не запрашивал каждый раз ввод пароля 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
Там есть некоторые отличия -
Это мой первый expect script
так что понятия не имею, что кодировать.Любые указатели?
Спасибо,
Sandeepan