我想在远程服务器上执行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/