Я пытаюсь построить скрипт ssh для запуска нескольких команд на хосте. Моя цель - получить вывод каждой команды. Мой целевой хост - это маршрутизатор cisco, и для следующего сценария для выполнения большей части одной команды мне нужно запустить ее для каждой команды, которую я хочу выполнить, что не очень изящное решение.PHP SSH несколько команд
$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 (это было что-то, что я также пробовал раньше), вторая команда возвращает ошибку. вот выход кли: сценарий изменился:
$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);}
выход из кли
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
Я только получаю выход из первой команды «ш запустить ИНТ тэ 1/1».
Могли вы не будете разрушать массив с помощью «&&», чтобы он автоматически выполнял все команды один за другим? –