Удаление файла на удаленной машине с помощью bash-скрипта

#bash #ssh #expect #delete-file

#bash #ssh #ожидать #удалить-файл

Вопрос:

Я хочу в основном копировать файлы с удаленных компьютеров, а после копирования удалять их.

Мне удалось скопировать файлы, используя expect и scp. Кроме того, удалось удалить файлы вне скрипта, но не удалось использовать команду ssh внутри скрипта. Это то, что у меня есть

 #!/usr/bin/expect -f
log_user 1
set timeout -1
set pass "pass"


spawn scp  user@remote.machine.com:Desktop/LoginCheck/Login/* .
expect {
          password: {send "$passr" ; exp_continue}

}
ssh user@remote.machine.com 'rm -rf Desktop/LoginCheck/Login/*'
expect {
          password: {send "$passr" ; exp_continue}

}
  

Итак scp , раздел кода работает.
Но ssh и rm -rf
это ошибка для ssh

 invalid command name "ssh"
    while executing
  

Может кто-нибудь предоставить рабочий скрипт?

Комментарии:

1. Почему вы используете Expect для этого? Было бы намного безопаснее создать пару ключей, скопировать открытый ключ на удаленный хост и использовать ssh и scp без пароля.

2. Этот скрипт должен будет работать на нескольких компьютерах. (эти несколько машин являются различными подчиненными jenkins, у меня нет доступа для создания пары ключей (это ограничение для меня)). Также SSH в этом скрипте не работает.

Ответ №1:

Разве команда ssh не должна быть новым порождением? Кстати, просто прочитав статью в Википедии об expect, одним из перечисленных «минусов» является:

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

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

Комментарии:

1. да, добавление spawn сделало свое дело, также изменив одиночные кавычки на двойные кавычки. ssh user@remote.machine.com "rm -rf Desktop/LoginCheck/Login/*"

Ответ №2:

Заменить ssh на spawn ssh ssh не является встроенной командой expect .

Ответ №3:

Вы просто пропустили спавн перед строкой ssh:

 spawn ssh user@remote.machine.com 'rm -rf Desktop/LoginCheck/Login/*'
  

Вы также должны добавить wait перед ним строку, потенциально проверяющую код выхода scp.

В любом случае, не используйте expect для автоматизации ssh, используйте ssh-ключи и sh-скрипты, как описано на других плакатах.

Комментарии:

1. Вы бы на самом деле поместили expect eof , а также wait перед следующим появлением