Php SSH2 как получить статус выхода у ssh2_shell?

Для получения статуса выхода из SSH2-сеанса в PHP необходимо использовать функцию ssh2_shell(). Функция ssh2_shell() создает интерактивное SSH-подключение, которое позволяет вам отправлять команды на удаленный сервер и получать ответы.

Однако, ssh2_shell() не возвращает статус выхода напрямую. Вместо этого вам нужно проверять вывод команды, чтобы определить, была ли выполнена команда успешно или нет.

Вот пример кода, который поможет вам получить статус выхода:

// Создаем SSH-подключение
$connection = ssh2_connect('hostname', 22);
ssh2_auth_password($connection, 'username', 'password');

// Создаем интерактивный сеанс
$shell = ssh2_shell($connection);

// Отправляем команду на удаленный сервер
fwrite($shell, 'your_command' . PHP_EOL);
sleep(1); // Ожидаем некоторое время для получения ответа

// Читаем вывод команды
$output = '';
while ($line = fgets($shell)) {
    $output .= $line;
}

// Получаем статус выхода
$stream_meta = stream_get_meta_data($shell);
$status = $stream_meta['exitstatus'];

// Закрываем соединение
fclose($shell);
ssh2_disconnect($connection);

// Проверяем статус выхода
if ($status === 0) {
    echo "Команда выполнена успешно. Вывод: " . $output;
} else {
    echo "Ошибка выполнения команды. Вывод: " . $output;
}

В этом примере hostname, username и password - это соответственно адрес удаленного сервера, имя пользователя и пароль. your_command - это команда, которую вы хотите выполнить на удаленном сервере.

Код создает SSH-подключение, после чего создает интерактивный сеанс с помощью ssh2_shell(). Затем команда отправляется с помощью функции fwrite(), и мы ждем некоторое время, прежде чем читать ответ. Используя цикл while, мы читаем вывод команды постепенно и сохраняем его в переменную $output. Затем мы получаем статус выхода с помощью функции stream_get_meta_data($shell), которая возвращает метаданные потока, включая статус выхода. Закрываем соединение и проверяем статус выхода - если он равен нулю, значит команда была выполнена успешно; если нет, значит произошла ошибка.

Очень важно отметить, что использование ssh2_shell() не является наилучшим решением для выполнения команд на удаленном сервере, особенно в случае, если у вас есть другие варианты доступа (например, SSH-ключи). Рекомендуется использовать библиотеки, такие как phpseclib или php-ssh2, которые предоставляют более надежный и безопасный способ работы с SSH в PHP.