2016-02-20 70 views
1

我使用下面的命令通過Web界面向多臺Linux計算機發送命令。 如果我選擇30或40個客戶端,我必須等待命令運行所有這些命令,然後才能得到任何結果。 只要命令在每臺計算機上運行,​​是否可以開始列出結果?在php/html網頁中動態顯示結果/輸出

<?php 
 
    include('Net/SSH2.php'); 
 
    
 
    $user = "user"; 
 
    $pass = "pass"; 
 
    
 
    $ip = $_POST['clients']; 
 
    $ssh = new Net_SSH2($ip); 
 
    $cmds = $_POST['commands']; 
 
    
 
    if(!empty($_POST['clients'])) { 
 
     foreach($_POST['clients'] as $ip) { 
 
      $ssh = new Net_SSH2($ip); 
 
      if (!$ssh->login($user, $pass)) {exit('Login Failed');} 
 
      echo "$ip: " . $ssh->exec($cmds) . "<br>"; 
 
     } 
 
    } 
 
?>
<form action="phpseclib/commands.php" method="post" target="main"> 
 
    <input type="checkbox" name="clients[]" value="192.168.0.51">Client001<br> 
 
    <input type="checkbox" name="clients[]" value="192.168.0.52">Client002<br> 
 
    <input type="checkbox" name="clients[]" value="192.168.0.53">Client003<br> 
 
    <input type="checkbox" name="clients[]" value="192.168.0.54">Client004<br> 
 
    <input type="checkbox" name="clients[]" value="192.168.0.55">Client005<br> 
 
    <br/> 
 
    \t <select name="commands"> 
 
        <option value="">Select Command</option> 
 
    \t \t <option value="uptime | sed 's/.*up \([^,]*\), .*/\1/'">Uptime</option> 
 
    \t \t <option value="printf $(free | grep -e-/+ | awk '{print $3/($3+$4) * 100.0 ''}' | cut -d '.' -f1)%%">Memory Usage</option> 
 
    </select> 
 
    <br> 
 
    <br/> 
 
    <input type="submit" value="Submit" /> 
 
    </form>

回答

0

你可以使用的,而不是依靠POST數據從一種形式的AJAX請求。每次選擇一個客戶端時,都可以發送一個異步請求並在瀏覽器中包含更新。

關於安全性的快速提示,你允許從瀏覽器注入shell命令嗎?如果這些input選項值的內容毫無疑問地被執行,那麼用戶可以在其中放入任何東西。