Я работаю над инструментом, который считывает конфигурацию iptables с удаленного хоста через SSH2, используя расширение PECL SSH2. Я могу успешно установить соединение с хостом, аутентифицироваться и выполнять команды. Проблема в том, что иногда поток не содержит данных.
/**
* Load the current firewall configuration
* @return bool
*/
public function loadRules() {
$stream = ssh2_exec($this->connection,"~/iptsave;");
stream_set_blocking($stream,true);
$iptablesSave = stream_get_contents($stream);
if(empty($iptablesSave)) {
return false;
}
parent::restore($iptablesSave);
return true;
}
Примерно в 25% случаев loadRules()
возвращает значение false, даже при подключении к locahost вместо удаленной системы. Я смог обойти эту проблему, изменив ssh2_exec
вызов на
$stream = ssh2_exec($this->connection,"~/iptsave; sleep .5");
но меня беспокоит, что что-то не так.