6

Мне нужно знать, как настроить работу cron, которая автоматически подключается к удаленному серверу, изменить каталог и получить все файлы в этом каталоге на локальном

я думаю, что должен использовать sftp, но я видел некоторые команды, называемые "spawn" в некоторых сценариях оболочки, и я запутался, что это будет делать и для чего?

spawn  sftp user@ipaddress
cd xxx/inbox
mget *

будет ли это работать в контексте загрузки удаленного каталога?

1 ответ1

5

В вашем случае spawn , скорее всего, является командой ожидаемого языка сценариев, который позволяет автоматизировать интерактивные программные операции. В таком случае spawn запускает внешнюю команду из ожидаемого скрипта. В вашем примере скрипта отсутствует последовательность shebang (первая строка начинается с #!) указывает expect интерпретатор и как таковой не будет интерпретироваться ожидаемым при непосредственном выполнении.

Проверка подлинности пароля с помощью sftp ограничена интерактивным режимом. Для управления sftp в интерактивном режиме вы можете использовать, например, следующий сценарий ожидаемых данных:

#!/usr/bin/env expect
set timeout 20    # max. 20 seconds waiting for the server response

set user username
set pass your-pass
set host the-host-address
set dir  server-dir

spawn sftp $user@$host
expect assword:

send "$pass\r"
expect sftp>

send "cd $dir\r"
expect sftp>

send "mget *\r"
expect sftp>

send "exit\r"
expect eof

Другой возможностью является использование аутентификации с открытым ключом, которая также более безопасна (см. Процедуру). В таком случае вы можете просто использовать sftp напрямую в пакетном режиме:

#!/bin/sh
user=username
host=the-host-address
dir=server-dir

sftp -b - "$user@$host" <<+++EOF+++
cd "$dir"
mget *
exit
+++EOF+++

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .