PHP/SSH: несколько команд в одном сеансе (подтверждение)

У меня проблема с PHP и SSH-Extension/Net-SSH-Libary. Я использую его для отправки команд в NetApp-Filer. Итак, я хочу создать/удалить тома в файле. Создание для томов не проблема.

Но когда я хочу их удалить, файлер запрашивает подтверждение («Вы уверены, что хотите удалить… да/нет»), и я не могу предоставить NetApp эту информацию. Для каждого exec-Command ist начинает новую сессию.

Можно ли запускать больше команд в одном сеансе или давать им подтверждение некоторых команд?

Мой код (только удаление тома):

<?php
include('Net/SSH2.php');
            $ssh = new Net_SSH2('172.22.31.53');
            if (!$ssh->login('admin', '12Test')) {
                exit('Login Failed');
            }

            echo $ssh->exec("vol unmount $row->name");
            sleep(1);
            echo $ssh->exec("vol offline $row->name");
            sleep(1);
            echo $ssh->exec("vol delete $vol_name \n y");
            $loesch = mysqli_query($db, "DELETE FROM volumes WHERE id = '$id'");
            header('Location: splash.html');

?>

Заранее спасибо!

Привет


person francesco93    schedule 04.04.2017    source источник


Ответы (1)


Я вижу несколько возможных решений:

  1. используйте \n :

    $ssh->exec("cd mydir\n./script");
    

    Или создайте скрипт со своими командами, например script.sh и сохраните его в формате UNIX:

    cd mydir
    ./script
    

    Затем выполните скрипт:

    $script = file_get_contents("script.sh");
    $ssh->exec($script);
    
  2. Используйте ; или && для разделения команд.

    ssh2_exec($connection, 'command1 ; command2');   //run both uncondtionally)
    ssh2_exec($connection, 'command1 && command2');  //run command2 only if command1 succeeds
    
  3. Используйте stream_set_blocking() следующим образом:

    $cmds = [ 'ls', 'ps ux' ];
    $connection = ssh2_connect( '127.0.0.1', 22 );
    ssh2_auth_password( $connection, 'username', 'password' );
    $output = [];
    foreach ($cmds as $cmd) {
        $stream = ssh2_exec( $connection, $cmd );
        stream_set_blocking( $stream, true );
        $stream_out = ssh2_fetch_stream( $stream, SSH2_STREAM_STDIO );
        $output[] = stream_get_contents($stream_out);
    }
    

    Вы найдете все выходные данные в массиве $output.

Справочник

person Niket Pathak    schedule 04.04.2017
comment
Я не думаю, что вы проверили свой ответ. - person Marcin Orlowski; 04.04.2017
comment
@MarcinOrlowski, почему минус? Это было проверено. Пожалуйста, проверьте ссылку тоже. - person Niket Pathak; 05.04.2017
comment
Мне не понравился ответ в том виде, в котором он был опубликован ранее. Теперь стало лучше, поэтому я отозвал свой отрицательный голос. - person Marcin Orlowski; 05.04.2017