sftp / scp файлы с помощью bash

Мне нужно загрузить набор файлов в учетную запись sftp.

Моя первая мысль заключалась в том, чтобы использовать функцию php ssh2_connect (), и я смог без проблем заставить ее работать локально. Однако, как только я перешел в среду разработки, я быстро понял, что это не лучшее решение, потому что существует слишком много зависимостей, которых не существует, и для их установки потребуется слишком много одобрений от слишком большого количества людей.

Итак, моей следующей мыслью было использовать bash, и здесь мне нужна помощь. Я буду запускать этот bash-скрипт каждый час через cron, поэтому он должен работать без присмотра. Однако, когда я запускаю sftp / scp, требуется пароль.

Учетная запись sftp не разрешает ssh-соединения, поэтому я не могу создавать авторизованные ключи. Я также не хочу полагаться на папку .ssh на удаленном компьютере.

Мы ценим любые предложения.

Имейте в виду, что я ничего не могу установить, поэтому никаких связок ключей, sshpass или ожиданий. Все остальные ответы, найденные в Как запустить команда sftp с паролем из сценария Bash? невозможна, так как я не могу ничего установить на сервер.


person Scott Joudry    schedule 27.06.2014    source источник
comment
@anubhava, это не дубликат, потому что сообщение, которое вы предоставили, не отвечает на мой вопрос   -  person Scott Joudry    schedule 27.06.2014
comment
На самом деле это так. Пожалуйста, потратьте немного времени на чтение ответов. Он позволяет запускать sftp / scp из оболочки без присмотра, используя различные предложенные способы.   -  person anubhava    schedule 27.06.2014
comment
@anubhava Я также упомянул в своем сообщении, что ответы из этого сообщения не подходят для моей ситуации, поскольку я не могу использовать ключи или устанавливать что-либо на сервере.   -  person Scott Joudry    schedule 27.06.2014
comment
Отсутствие доступа к оболочке не обязательно означает, что вы не можете настраивать ключи. Если вы можете писать в ~/.ssh/authorized_keys, то вы можете сгенерировать пару ключей в другой системе, подготовить соответствующий файл authorized_keys и загрузить его на сервер с помощью sftp - если сервер настроен на разрешение аутентификации по ключу.   -  person nobody    schedule 27.06.2014
comment
@ScottJoudry: В связанных вопросах и ответах предлагается несколько способов. Не все из них потребуют установки некоторого программного обеспечения.   -  person anubhava    schedule 27.06.2014
comment
У меня нет контроля над целевой учетной записью sftp, поэтому создание папки в этой учетной записи и требование ее работы - это тоже не то, что я хочу делать.   -  person Scott Joudry    schedule 27.06.2014
comment
@anubhava, я просмотрел этот пост, и во всех ответах используется то, чего нет на моем сервере.   -  person Scott Joudry    schedule 27.06.2014
comment
хорошо, я повторно открыл вопрос, но вряд ли вы получите здесь простые ответы.   -  person anubhava    schedule 27.06.2014
comment
Спасибо, никогда не помешает попробовать   -  person Scott Joudry    schedule 27.06.2014


Ответы (2)


Первоначально я пытался использовать ssh2_connect () php, потому что php создает файл, который мне нужно загрузить. По этой причине лучше иметь эту транзакцию sftp в моем php-скрипте, но поскольку она не работала, я перешел на bash.

Мое решение фактически использует php и curl:

$ch = curl_init();

$fp = fopen($file, "r");

curl_setopt($ch, CURLOPT_URL, "sftp://USER:PASS@HOST/" . basename($file));
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_SFTP);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($file));

curl_exec($ch);

curl_close($ch);
person Scott Joudry    schedule 27.06.2014

проверьте lftp, это очень мощный инструмент для передачи файлов. Например:

lftp -u "$username","$password" -e "cd /desc/path; put $FILE; bye" sftp://remote.example.com

проверьте также mput, зеркало в инструкции lftp.

КСТАТИ. Я не думаю, что вам нужно что-то устанавливать на удаленном сервере, если вы используете expect. в любом случае, я использую lftp вместо ожидания в большинстве подобных ситуаций на работе.

person lihao    schedule 27.06.2014
comment
lftp не установлен на сервере. См. Предыдущий комментарий в посте - person Scott Joudry; 27.06.2014
comment
@ScottJoudry Я могу ошибаться в этом, но я почти уверен, что lftp - это программа на стороне клиента, и вам просто нужен сервер SFTP, работающий на стороне сервера. - person Piccolo; 27.06.2014
comment
Я загружаю файлы с одного сервера на другой, а на исходном сервере не установлен lftp. - person Scott Joudry; 27.06.2014