Используя ожидание, создайте с помощью scp

В настоящее время я пытаюсь автоматизировать передачу файлов с помощью команды scp с помощью сценария оболочки и ожидаемого пакета. Основываясь на том, что я видел, кажется, что у меня должно быть #!/usr/bin/expect -f Но когда я это сделал, я все равно получаю ошибки:

DirectoryChange.sh: line 33: spawn: command not found
couldn't read file "*Password:*": no such file or directory
DirectoryChange.sh: line 35: send: command not found
DirectoryChange.sh: line 36: interact: command not found

Код, который у меня есть, работает примерно так:

#!/usr/bin/expect -f

repository=$PWD"/subdirectory/"
set pass "***********"

cd $repository
spawn scp -r user@host:/copyDirectory/ .
expect "*Password:*"
send "${pass}\r";
interact

person AJZec1    schedule 30.05.2013    source источник


Ответы (2)


Похоже, вы вызываете сценарий ожидания, например sh DirectoryChange.sh. Очевидно, что sh не является правильным интерпретатором сценария expect.

  • изменить расширение файла: ".sh" для сценариев оболочки
  • убедитесь, что у него есть права на выполнение, затем запустите его с помощью ./DirectoryChange.exp
  • repository=$PWD"/subdirectory/" - это не то, как назначать переменные в ожидании. удалите эту строку и измените строку cd на cd subdirectory
  • вам не нужно взаимодействовать с scp, поэтому измените последнюю строку на expect eof
person glenn jackman    schedule 30.05.2013

Хранить пароли в скриптах или любом другом файле — плохая практика. Вместо этого используйте ключи аутентификации SSH.

Взгляните на это руководство. .

person Eric Citaire    schedule 02.06.2013