Для получения статуса выхода из 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.