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

Используйте rsync для загрузки файлов с локального на удаленный сервер изнутри php скрипта без ввода пароля

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

Итак, cli работает без проблем:

rsync -r -a -v -e "ssh -l user" --delete ~/local/file 111.111.11.111:~/remote/;

Но когда я пытаюсь запустить то же самое из сценария PHP (на веб-странице на моем локальном сервере):

$c='rsync -r -a -v -e --log-file=FILE "ssh -l user" --delete ~/local/file 111.111.11.111:~/remote/';

//exec($c,$data);
passthru($c,$data);
print_r($data);

Вот что я получаю:

2011/01/23 19:18:29 [6401] rsync: connection unexpectedly closed (0 bytes received so far) [sender] 2011/01/23 19:18:29 [6401] 
rsync error: unexplained error (code 255) at io.c(601) [sender=3.0.7] 

Разрешения qre устанавливаются следующим образом:

Local:
chmod 600 ~/.ssh/local-rsync-key
chmod 600 ~/.ssh/local-apache-key
chmod 700 ~/.ssh/

Remote:
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh/
chmod 700 ~/

Я зарегистрировал два ключа на ~ / .ssh / authorized_keys:

user@localserver
apache@localserver

Я иссяк из идей ... Думаю, мне нужно сделать что-то еще в удаленном файле / etc / ssh / sshd_config. Я использую Nginx на обоих серверах. Спасибо за любую помощь.

ОБНОВИТЬ:

Хотя я не могу получить rsync, вот как мне удалось передать файл с локального на удаленный:

if($con=ssh2_connect('111.111.11.111',22)) echo 'ok!';
if(ssh2_auth_password($con,'apache','xxxxxx')) echo ' ok!';
if(ssh2_scp_send($con,'localfile','/remotefolder',0755)) echo ' ok!';

Требуется локальный файл: 0644 Требуется удаленная папка: 0775

Я также читал это предложение: «Я не думаю, что вы хотите« скопировать ключ куда-нибудь, где apache сможет его достать »- это нарушение безопасности. Лучше изменить сценарий для запуска от имени защищенного пользователя, а затем настроить ключи .ssh для входа без пароля между серверами.

Если кто-то знает, как это сделать, пожалуйста, это будет большим подспорьем.

пытаться -e "ssh -l user -i <keyfile>"

При запуске в командной строке ssh использовать ключевые файлы на $HOME/.ssh/, но в PHP он запускается от имени пользователя Apache, поэтому может не иметь $HOME; тем более $HOME/.ssh/id_dsa. Итак, либо вы специально указываете ему, какой ключевой файл использовать, либо вручную создаете этот каталог и его содержимое.