Я пытался получить скрипт 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