используем php для синхронизации по rsync через ssh с ключам

saifuddin

Новичок
Доброго времени суток.
Помогите разобраться с настройкой PHP.
Есть команда rsync, для синхронизации файлов. Сейчас есть два сервера cs1 и cs2. на обоих стоят ssh ключи без паролей.
Если ввести в терминале команду

rsync -rvzat --delete -e 'ssh -p 8055 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null' /var/www/editor/user/ user@cs2:/var/www/editor/user/

То происходит синхронизация. Теперь мне нужно добиться этого при помощи PHP.

<?php

$connection = ssh2_connect('cs2', 22, array('hostkey'=>'ssh-rsa'));

if (ssh2_auth_pubkey_file($connection, 'user',
'/home/user/.ssh/id_rsa.pub',
'/home/user/.ssh/id_rsa', '')) {
echo "Public Key Authentication Successful\n";
} else {
die('Public Key Authentication Failed');
}

$stream = ssh2_exec($connection, rsync -rvzat --delete -e $connection /var/www/editor/user/ user@cs2:/var/www/editor/user/");
stream_set_blocking($stream, true);
$stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDERR);
echo stream_get_contents($stream_out);


Явно я что-то не так делаю. Помогите разобраться что нужно сделать, чтобы все заработало. Подключение по ключам происходит. Вот только выполнить команду не могу.

Я уже записал эту команду в баш скрипте и попробовал его запустить из терминала. Все работает. Но, если запускать через функцию system, то он не отрабатывает, потому, что там есть ssh. Без него он будет работать. Если rsync будет локально отрабатывать команду.
 
Последнее редактирование:

fixxxer

К.О.
Партнер клуба
А rsync со стороны клиента магическим образом появиться должен, что ли?

Запускай rsync через exec/system/proc_open.
 

saifuddin

Новичок
А, почему он запускается и отрабатывает, если указать вместо user@host локальную папку?

Я пробовал его запускать через php и ставил в настройках синхронизация с одной папки на другую внутри одного сервера, все отрабатывает. Это я запускал через тот же system. А, тут вся загвоздка в ssh. Если в любой программе присутствует подключение по ssh, php у меня не хочет отрабатывать. Я так же и в баш скрипте пробовал все это проделать. Если в скрипте нет подключения по ssh. Он отрабатывает любую команду. Я конечно попробую сделать, что вы говорите, но это маловероятно.
 

saifuddin

Новичок
Моя ошибка. я не понял что вы имели ввиду.

Я быстро просмотрел сообщение и решил вы имеете ввиду /usr/bin/rsync указать в начале... моя ошибка.


Я в самом начале пробовал его запускать через system, exec ни к чему хорошему это не приводит. Включил вывод ошибок в php. Сейчас вам покажу вывод.
 

saifuddin

Новичок
$stream = system("/usr/bin/rsync -rvzat --delete -e 'ssh -p 8055 -i/home/holluser/.ssh/id_rsa.pub' /var/www/editor/user/ user@cs2:/var/www/editor/user/", $result);
echo $result;

в начале выводит, что подключение по ssh удачно.
Потом код ошибки 12
 

saifuddin

Новичок
если добавить к rsync ключ --process, он выводит на экран содержимое того, что было изменено, код ошибки 1 вместо 12 становится.
 
Сверху