Страница 1 из 1
SMG-2016 автоматизация из PHP [РЕШЕНО]
Добавлено: 13 апр 2017 21:37
AlexNVZ
Добрый день.
Стоит вопрос автоматизации для SMG-2016 через PHP
Пробовал такую конструкцию:
Код: Выделить всё
<?php
class ssh {
var $stream;
var $connection;
var $data;
function connect($host,$login,$pass,$port) {
$this->connection = ssh2_connect($host, $port);
return ssh2_auth_password($this->connection, $login, $pass);
}
function cmd ($cmd) {
if( !($this->stream=ssh2_exec($this->connection,$cmd )) ) {
echo "fail: unable to execute command";
}
else {
stream_set_blocking($this->stream, true );
$this->data = "";
while( $buf = fread($this->stream,4096) ) {
$this->data .= $buf;
}
}
return $this->data;
}
function close () {
fclose($this->stream);
}
};
$S = new ssh();
$S->connect('192.168.0.50', 'admin', 'webastpass125','10122');
echo $S->cmd("space hint no\r");
echo $S->cmd("show system info\r");
$S->close();
?>
Зависает и не возвращает ответа. На LInux сервере все отрабатывает.
Вчем отличие шела Linux от SMG
Re: SMG-2016 автоматизация из PHP
Добавлено: 14 апр 2017 14:10
Bokrenok
> echo $S->cmd("space hint no\r");
может будет пальцем в небо, но почему тут просто "\r" ? может попробовать "\r\n" ?
Re: SMG-2016 автоматизация из PHP
Добавлено: 16 апр 2017 16:10
AlexNVZ
Код: Выделить всё
может будет пальцем в небо, но почему тут просто "\r" ? может попробовать "\r\n" ?
Пробовал, не помогло.
Re: SMG-2016 автоматизация из PHP
Добавлено: 16 апр 2017 16:20
bravo
дежавю... была такая тема уже... только с TCL по-моему.
Посмотрите, может быть поможет:
viewtopic.php?f=7&t=6761&p=31367&hilit=tcl#p31367
Re: SMG-2016 автоматизация из PHP
Добавлено: 16 апр 2017 17:42
AlexNVZ
Да, но там проблема с пробелами была, это у меня самая первая команда.
И там через раз работало. Здесь же вообще ни как не хочет.
Re: SMG-2016 автоматизация из PHP
Добавлено: 16 апр 2017 17:48
AlexNVZ
Господа разработчики, вы же можете протестить скрипт и дать рекомендации. Не сложно же...
Re: SMG-2016 автоматизация из PHP
Добавлено: 17 апр 2017 12:29
Bokrenok
AlexNVZ писал(а):Господа разработчики, вы же можете протестить скрипт и дать рекомендации. Не сложно же...
ругается:
Код: Выделить всё
PHP Fatal error: Call to undefined function ssh2_connect()
хотя php-биндинг стоит:
Код: Выделить всё
i libssh2-1 - SSH2 client-side library
i libssh2-1-dev - SSH2 client-side library (development headers)
i php-ssh2 - Bindings for the libssh2 library
Re: SMG-2016 автоматизация из PHP
Добавлено: 20 апр 2017 13:24
AlexNVZ
На CentOs дополнительно устанавливается php-pecl-ssh2, ошибок нет
Если скриптом обращаюсь на сервер, он нормально отвечает.
Re: SMG-2016 автоматизация из PHP
Добавлено: 22 апр 2017 15:56
AlexNVZ
Вопрос не решен.
Уважаемые разработчики, когда можно ожидать рекомендаций?
Re: SMG-2016 автоматизация из PHP
Добавлено: 25 апр 2017 15:43
Bokrenok
AlexNVZ писал(а):Вопрос не решен.
Уважаемые разработчики, когда можно ожидать рекомендаций?
сравнил что получается при запуске скрипта и при входе по ssh через linux-shell
на девайсе запускаются такие процессы:
Код: Выделить всё
19627 root 0:00 sshd: admin@notty # логин скрипта
19652 root 0:00 clish -c space hint no # попытка выполнить shell-команду
20257 root 0:00 sshd: admin@pts/0 # логин линуксового ssh-клиента
20265 root 0:00 -clish # запущенный shell для клиента
вот и видны различия.
php-скрипт пытается каждый раз запускать "shell с доп.командами" вместо того, чтобы просто закидывать команды в загруженный shell без явного вызова shell каждый раз.
если знаете как поменять поведение скрипта - можно продолжить эксперименты.
Re: SMG-2016 автоматизация из PHP
Добавлено: 25 апр 2017 15:52
Bokrenok
Re: SMG-2016 автоматизация из PHP
Добавлено: 25 апр 2017 16:24
Bokrenok
вот так заработало:
(причесать конечно надо немного)
Код: Выделить всё
cat ./script.php
#!/usr/bin/php
<?php
class ssh {
var $shell;
var $connection;
var $data;
function connect($host,$login,$pass,$port) {
$this->connection = ssh2_connect($host, $port);
return ssh2_auth_password($this->connection, $login, $pass);
}
function shell () {
$this->shell=ssh2_shell($this->connection, 'xterm');
}
function read () {
while($o=fgets($this->shell)){
echo $o;
}
return $this->data;
}
function cmd ($cmd) {
fwrite($this->shell, $cmd);
fflush($this->shell);
}
function close () {
fclose($this->shell);
}
};
$S = new ssh();
echo $S->connect('192.168.23.125', 'admin', 'rootpasswd', '22');
echo $S->shell();
sleep(3); // wait for shell to load
echo $S->read();
echo $S->cmd("space hint no\r\n");
sleep(1);
echo $S->read();
sleep(1);
echo $S->cmd("show system info\r\n");
sleep(1);
echo $S->read();
echo 'done'.PHP_EOL;
$S->close();
?>
Re: SMG-2016 автоматизация из PHP
Добавлено: 26 апр 2017 15:55
AlexNVZ
Большое спасибо, теперь работает, со слипами только придумаю что делать.