Я пытаюсь построить скрипт ssh для запуска нескольких команд на хосте. Моя цель – получить вывод каждой команды. Мой целевой хост – это маршрутизатор cisco, и для следующего сценария для выполнения большей части одной команды мне нужно запустить ее для каждой команды, которую я хочу выполнить, что не очень изящное решение.
$cmd = array ('sh run int te 1/1', 'sh run int te 1/2'); for ($i = 0; $i <= 1; $i++) { $connection = ssh2_connect('10.1.1.1', 22); ssh2_auth_password($connection, 'user', 'pass'); $stream = ssh2_exec($connection, $cmd[$i]); stream_set_blocking($stream, true); $stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO); echo stream_get_contents($stream_out); }
Я создал цикл, потому что мне не удалось получить вывод для каждой команды в том же потоке. Поскольку я предполагаю, что php завершает ssh-соединения в конце каждого потока.
То, что я хотел бы достичь, состоит в том, чтобы выполнить несколько команд и получить вывод в том же потоке (если это возможно).
Я редактирую сообщение, чтобы ответить на предложения, сделанные @Melvin Koopmans и @LSerni.
если я сменил код как sugested (это было то, что я также пробовал раньше), вторая команда возвращает ошибку. вот выход cli: скрипт изменился:
$cmds = array ('sh run int te 1/1', 'sh run int te 1/2'); $connection = ssh2_connect('10.1.1.1', 22); ssh2_auth_password($connection, 'user', 'pass'); foreach ($cmds as $cmd) { $stream = ssh2_exec( $connection, $cmd ); stream_set_blocking( $stream, true ); $stream_out = ssh2_fetch_stream( $stream, SSH2_STREAM_STDIO ); echo stream_get_contents($stream_out);}
выход из cli
interface TenGigabitEthernet1/1 description trunk switchport trunk allowed vlan 1,2,3,4,5,6,10 switchport mode trunk auto qos trust storm-control broadcast include multicast storm-control broadcast level 1.00 spanning-tree guard loop service-policy input AutoQos-4.0-Input-Policy service-policy output AutoQos-4.0-Output-Policy ip dhcp snooping trust end PHP Warning: ssh2_exec(): Unable to request a channel from remote host in C:\Users\SMS\Downloads\php_scripts\ssh.php on line 13 PHP Warning: stream_set_blocking() expects parameter 1 to be resource, boolean given in C:\Users\SMS\Downloads\php_scripts\ssh.php on line 14 PHP Warning: ssh2_fetch_stream() expects parameter 1 to be resource, boolean given in C:\Users\SMS\Downloads\php_scripts\ssh.php on line 15 PHP Warning: stream_get_contents() expects parameter 1 to be resource, null given in C:\Users\SMS\Downloads\php_scripts\ssh.php on line 16
Я получаю только выход из первой команды «sh run int te 1/1».