Назад | Перейти на главную страницу

Сценарий оболочки для автоматизации загрузки SFTP?

Я пытался получить скрипт PHP для загрузки файла по SFTP, но не смог. Я попытался задать свой вопрос на stackoverflow.com, но не получил рабочего решения:

https://stackoverflow.com/questions/1767117/how-to-sftp-upload-files-from-php

Итак, теперь я хочу попробовать другой подход. Есть ли способ написать сценарий оболочки, который может выдавать несколько команд для загрузки файла sftp на другой сервер? Если бы я вводил команды одну за другой из терминала, это выглядело бы так:

>sftp user@server.com
>password: mypassword
>put file.csv

Я попытался поместить эти три строки в файл ./automaticupload. Когда я запустил файл, но терминал показывает мне:

user@server.com's password:

хотя я ввел пароль в строке автоматической загрузки.

Я не могу создать учетную запись ssh / scp / sftp без пароля. Удаленный server.com не дает мне доступа по ssh или scp.

Что я должен делать?

Если вы хотите использовать sftp из сценария, вам необходимо настроить SSH-ключи без пароля с помощью ssh-keygen (1) или используйте sshpass

Я почти всегда голосую за первое, но это может зависеть от более подходящей ситуации.

Установите и используйте expect, он предназначен именно для таких ситуаций.

Используйте сценарий autoexpect для создания сценария ожидания из записанного сеанса реального времени. В зависимости от дистрибутива autoexpect либо включен в основной пакет expect, либо (как ни странно) в expect-dev в Ubuntu.

Используйте socat: http://www.dest-unreach.org/socat/

Например:

(sleep 2; echo password) | socat - EXEC: "sftp -o batchmode=no -o PubkeyAuthentication=no -b batchfile user@host",pty,setsid,ctty