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 :: Отправить команду на удалённый сервер ssh2

 PHP.SU

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


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

> Без описания
Art1
Отправлено: 05 Мая, 2014 - 13:59:42
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Май 2014  


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




Доброе время суток Всем!
Хочу с помощью функции ssh2 отправить команду на удалённый сервер, причём параметр gameid я получаю через GET запрос. Скрипт выполняется успешно, без каких либо ошибок, но значение не изменяет. Скобки вроде все экранировал, что здесь не так? Буду очень признателен за помощь.
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. $connection = ssh2_connect('host', 22);
  4. ssh2_auth_password($connection, 'root', 'pass');
  5.  
  6. $stream = ssh2_exec($connection, 'mysql -hIP -uroot -ppass -e"UPDATE \`panel\`.\`servers\` SET \`game_id\` = \'{$_GET[\'gameid\']}\' WHERE \`servers\`.\`server_id\` = 31;"');
  7. ?>

Решил попробовать разные варианты и написал таким образом:
PHP:
скопировать код в буфер обмена
  1. $gameid = $_GET['gameid'];
  2. $query = "UPDATE panel.servers SET game_id = '$gameid' WHERE servers.server_id = '31'";
  3. $connection = ssh2_connect('host', 22);
  4. ssh2_auth_password($connection, 'root', 'pass');
  5. $stream = ssh2_exec($connection, 'mysql -hIP -uroot -ppass -e $query');

Всё выполняется без ошибок, но значение в базу данных не заносит.

(Отредактировано автором: 05 Мая, 2014 - 14:50:45)

 
 Top
Stierus Супермодератор
Отправлено: 05 Мая, 2014 - 19:05:19
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


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




Может, все дело в
Цитата:
'mysql -hIP -uroot -ppass -e $query'
Видимо, имелось ввиду
PHP:
скопировать код в буфер обмена
  1. 'mysql -hIP -uroot -ppass -e '.$query
 
My status
 Top
Art1
Отправлено: 05 Мая, 2014 - 19:58:36
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Май 2014  


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




Stierus пишет:
Может, все дело в
Цитата:
'mysql -hIP -uroot -ppass -e $query'
Видимо, имелось ввиду
PHP:
скопировать код в буфер обмена
  1. 'mysql -hIP -uroot -ppass -e '.$query

Попробовал, к сожалению выполнилось без ошибок, но нет никаких изменений в базе данных. В чём ещё может быть дело?
Кстати, а здесь не надо в запросе кавычки экранировать?

(Отредактировано автором: 05 Мая, 2014 - 20:04:10)

 
 Top
Panoptik
Отправлено: 05 Мая, 2014 - 20:55:33
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


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




Art1 пишет:
-hIP
зачем вот это указываете в команде?
(Добавление)
если сервер мускула открыт для подключения удаленно то можно не подключаться по ссш, а выполнить команду на своем хосте, если конечно у вас на нем стоит мускул-клиент указывая этот самый аргумент -h и после него айпи хоста


-----
Just do it
 
 Top
Art1
Отправлено: 06 Мая, 2014 - 01:48:43
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Май 2014  


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




Panoptik, Реализовал всё посредством php mysql. Всё получилось и работает. Теперь проблема, нужно отправить уже команду на сервер через ssh2, переменную задаю через get запрос, но в никакую не хочет. Вот привожу пример кода, что здесь не правильно?
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $link = mysql_connect('localhost', 'root', 'pass');
  3. $id = $_GET['id'];
  4. $igra = $_GET['igra'];
  5. $server = $_GET['server'];
  6. $query = ("UPDATE `panel`.`servers` SET `game_id` = '$id' WHERE `servers`.`server_id` = $server");
  7. $result = mysql_query($query);
  8. //
  9. $connection = ssh2_connect('host', 22);
  10. ssh2_auth_password($connection, 'root', 'pass');
  11.  
  12. $stream = ssh2_exec($connection, 'cp -a /root/$igra/* /home/gs$server/');
  13. ?>

Запрос выполняется нормально, но содержимое директории в запросе ssh2 не копируется.
UPD.
Пока в запросе начал использовать только одну переменную. Такой вопрос, вместо содержимого директории /root/$igra/ копируется вся директория root, а если с под root'а выполнить - то всё работает нормально. Что не так с этой командой?

(Отредактировано автором: 06 Мая, 2014 - 02:14:58)

 
 Top
Мелкий Супермодератор
Отправлено: 06 Мая, 2014 - 09:27:49
Post Id



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


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


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




Art1 пишет:
'cp -a /root/$igra/* /home/gs$server/'

Обратите всё-таки внимание на синтаксис строковых значений: http://www.php.su/learnphp/datatypes/?string
Одинарные кавычки очень далеко не то же самое, что двойные.

И под рутом работать мысль тоже очень плохая.


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB