Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: используем php для синхронизации по rsync через ssh с ключам
Форумы портала PHP.SU » Серверное администрирование » Администрирование *nix » используем php для синхронизации по rsync через ssh с ключам

Страниц (1): [1]
 

1. saifuddin - 24 Января, 2016 - 10:57:16 - перейти к сообщению
Доброго времени суток.
Помогите разобраться с настройкой PHP.
Есть команда rsync, для синхронизации файлов. Сейчас есть два сервера cs1 и cs2. на обоих стоят ssh ключи без паролей.
Если ввести в терминале команду
CODE (htmlphp):
скопировать код в буфер обмена
  1. 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.

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3.  
  4. $connection = ssh2_connect('cs2', 22, array('hostkey'=>'ssh-rsa'));
  5.  
  6. if (ssh2_auth_pubkey_file($connection, 'user',
  7.                          '/home/user/.ssh/id_rsa.pub',
  8.                          '/home/user/.ssh/id_rsa', '')) {
  9.  echo "Public Key Authentication Successful\n";
  10. } else {
  11.  
  12.  die('Public Key Authentication Failed');
  13. }
  14.  
  15.  
  16. $stream = ssh2_exec($connection, "rsync -rvzat --delete -e $connection  /var/www/editor/user/  user@cs2:/var/www/editor/user/");
  17. stream_set_blocking($stream, true);
  18. $stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);
  19. echo stream_get_contents($stream_out);
  20.  


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

Я уже записал эту команду в баш скрипте и попробовал его запустить из терминала. Все работает. Но, если запускать через функцию system, то он не отрабатывает, потому, что там есть ssh. Без него он будет работать. Если rsync будет локально отрабатывать команду.
2. Мелкий - 24 Января, 2016 - 11:05:00 - перейти к сообщению
Зачем вы в ssh2_exec оборачиваете команду в system?
Второе, $connection - это ресурс. Обычно у них нет приведения к строке и что вы пытаетесь скормить аргументу -e я не очень понимаю.

Для дебага кроме STDIO поглядите в STDERR
3. saifuddin - 24 Января, 2016 - 11:07:12 - перейти к сообщению
Мелкий пишет:
Зачем вы в ssh2_exec оборачиваете команду в system?
Второе, $connection - это ресурс. Обычно у них нет приведения к строке и что вы пытаетесь скормить аргументу -e я не очень понимаю.

Для дебага кроме STDIO поглядите в STDERR


Я новичок в PHP. Лучше скажите как мне на PHP запустить эту команду. Буду вам при много благодарен.
4. Мелкий - 24 Января, 2016 - 11:13:58 - перейти к сообщению
уже сказал.
5. saifuddin - 24 Января, 2016 - 11:16:17 - перейти к сообщению
Мелкий пишет:
уже сказал.


PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. $stream = ssh2_exec($connection, 'ls -l /');
  4. $stream_set_blocking($stream, true);
  5. $stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDERR);
  6. echo stream_get_contents($stream_out);
  7.  
  8.  


Вот на примере другой команды решил сделать.
Вывод на экране браузера

CODE (htmlphp):
скопировать код в буфер обмена
  1. Public Key Authentication Successful

(Добавление)


Что дальше делать?
Опечатка. Я исправил.
(Добавление)
saifuddin пишет:
rsync -rvzat --delete -e 'ssh -p 8055 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'  /var/www/editor/user/  user@cs2:/var/www/editor/user/



будет работать в терминале если ее написать вот так. Может это поможет в решении поставленной задачи.

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. rsync -rvzat --delete -e 'ssh -p 8055 -i/home/user/.ssh/id_rsa.pub'  /var/www/editor/user/  user@cs2:/var/www/editor/user/


Ключ без пароля. Если так запустить в терминале, она отработает.
(Добавление)
Включил ошибки


Fatal error:
Function name must be a string
Notice: Undefined variable: stream_set_blocking in


оба ругаются на строку
PHP:
скопировать код в буфер обмена
  1.  
  2. $stream_set_blocking($stream, true);
  3.  

 

Powered by ExBB FM 1.0 RC1