linux — копирует удаленный файл с помощью rsync в Stack Overflow

Я пытаюсь выполнить с PHP команду (rsync) для копирования папок и файлов с удаленного сервера в локальную папку.

Это код, который я написал в php. Команда работает в SSH (локальный терминал и удаленный с putty.exe), правильно копируя папки и файлы.

Но это не работает в PHP. Что я могу сделать? Знаете ли вы лучший (безопасный / оптимальный) способ сделать это?

exec("echo superuserpassword | sudo -S sshpass -p 'sshremoteserverpassword' rsync -rvogp --chmod=ugo=rwX --chown=ftpuser:ftpuser -e ssh [email protected]:/path/files/folder /opt/lampp/htdocs/dowloadedfiles/", $output, $exit_code);

РЕДАКТИРОВАТЬ:
Я читал это руководство создать ссылку между моим сервером и моей локальной машиной.

Теперь я могу войти с помощью ssh на моей удаленной машине без пароля.

Я изменил свою команду:

 rsync -crahvP --chmod=ugo=rwX --chown=ftpuser:ftpuser remote.com:/path/to/remote/files /path/to/local/files/

Эта команда также работает в терминале, но когда я отправляю ее с помощью команды exec php, она снова завершается сбоем, но я получаю еще одну другую ошибку: 127.

Как MarcoS сказал в своем ответе, я проверил error_log.

Сообщения такие:

ssh: relocation error: ssh: symbol EVP_des_cbc, version OPENSSL_1.0.0 not defined in file libcrypto.so.1.0.0 with link time reference
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: remote command not found (code 127) at io.c(226) [Receiver=3.1.1]

0

Решение

Я полагаю, вы испытываете проблемы идентичности… 🙂

В любом случае вы запускаете команду как вошедший в систему пользователь.
На PHP вы запускаете команду от имени пользователя вашего веб-сервера (например, Apache часто запускается как www-data, или же apache Пользователь …).

Одно возможное решение, которое я вижу (если вышеупомянутое является реальной причиной проблемы), — это добавить вашего пользователя в группу веб-серверов …

Я бы также посоветовал вам проверить журналы ошибок веб-сервера, чтобы убедиться в истинной причине проблемы … 🙂

1

Другие решения

Ну, после много попыток / ошибок, я закончил вырезать проблему в корне:

Я читал это руководство (как и последний, но лучше объясненный), и я изменил php-файл, который выполняет команду rsync, на удаленный сервер (где находятся файлы) и запустил там файл rsync.php, и он работал отлично.

Выполнить на машине с файлами (файлы для копирования и rsync.php)

1.- ssh-keygen генерирует ключи

ssh-keygen

Введите пустую фразу-пароль и повторите пустую фразу-пароль еще раз.

2.- ssh-copy-id копирует открытый ключ на удаленный хост

ssh-copy-id -i ~/.ssh/id_rsa.pub remoteserveraddressip(xxx.xxx.xxx.xxx)

Файл rsync.php:

exec("rsync -crahvP /path/in/local/files/foldertocopy remoteuser@remoteserveraddress:/path/in/remote/destinationfolder/", $output, $exit_code);

После всего этого перейдите к файлу rsync.php, и все должно работать. По крайней мере, работал на меня …

1

По вопросам рекламы [email protected]