我想在远程服务器上执行iptables命令,并使用php打印所有iptables命令输出:

$connection = ssh2_connect($server_ip, $server_port);

//authenticating username and password
if(ssh2_auth_password($connection, $server_user, $server_pwd)){
    $conn_error=0;
}else{
    $conn_error=1;
}

$stream = ssh2_exec($connection, "iptables -L -n --line-number");
stream_set_blocking( $stream, true );
$data = "";
while( $buf = fread($stream,4096) ){
   $data .= $buf."<br>";
}
fclose($stream);

服务器连接和身份验证完全正常。但是命令输出
为空,基本上不执行除基本命令以外的命令。

最佳答案

这是因为对stream_set_blocking()的调用改变了fread()的行为。您可以将代码更改为如下所示:

$data = '';
while (!feof($stream)) {
    $data .= fread($stream, 4096);
}

echo "$data\n";

或者,更简单地说:
$data = stream_get_contents($stream);
echo "$data\n";

关于php - PHP ssh2_exec()未执行iptables命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52276123/

10-15 05:24