2017-04-04 107 views
0

我遇到了PHP和SSH-Extension/Net-SSH-Libary的問題。我用它將命令發送到NetApp-Filer。所以我想創建/刪除文件管理器上的卷。創建卷是沒有問題的。PHP/SSH:在同一會話中執行多個命令(確認)

但是,當我想刪除它們時,文件管理器詢問是否確認(「您確定要刪除.. y/n」),我無法向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'); 

?> 

感謝的提前!

問候

回答

1

我看到幾個可能的解決方案:

  1. 使用\n

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

    或者創建擁有您的命令的腳本,例如script.sh並將其保存在UNIX格式:

    cd mydir 
    ./script 
    

    然後EXEC腳本:

    $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中所有的輸出。

Reference

+0

我不認爲你已經測試你的答案。 –

+0

@MarcinOrlowski爲什麼downvote?這已經過測試。請檢查參考。 –

+0

我不喜歡以前發佈的答案。現在好多了,所以我收回了我的downvote。 –