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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: используем php для синхронизации по rsync через ssh с ключам

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: используем php для синхронизации по rsync через ssh с ключам
saifuddin
Отправлено: 24 Января, 2016 - 10:57:16
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Авг. 2012  


Помог: 0 раз(а)




Доброго времени суток.
Помогите разобраться с настройкой 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 будет локально отрабатывать команду.

(Отредактировано автором: 24 Января, 2016 - 11:26:46)

 
 Top
Мелкий Супермодератор
Отправлено: 24 Января, 2016 - 11:05:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Зачем вы в ssh2_exec оборачиваете команду в system?
Второе, $connection - это ресурс. Обычно у них нет приведения к строке и что вы пытаетесь скормить аргументу -e я не очень понимаю.

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


-----
PostgreSQL DBA
 
 Top
saifuddin
Отправлено: 24 Января, 2016 - 11:07:12
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Авг. 2012  


Помог: 0 раз(а)




Мелкий пишет:
Зачем вы в ssh2_exec оборачиваете команду в system?
Второе, $connection - это ресурс. Обычно у них нет приведения к строке и что вы пытаетесь скормить аргументу -e я не очень понимаю.

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


Я новичок в PHP. Лучше скажите как мне на PHP запустить эту команду. Буду вам при много благодарен.
 
 Top
Мелкий Супермодератор
Отправлено: 24 Января, 2016 - 11:13:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




уже сказал.


-----
PostgreSQL DBA
 
 Top
saifuddin
Отправлено: 24 Января, 2016 - 11:16:17
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Авг. 2012  


Помог: 0 раз(а)




Мелкий пишет:
уже сказал.


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.  

(Отредактировано автором: 24 Января, 2016 - 11:29:31)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Администрирование *nix »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB