Я пытаюсь установить интерактивное SSH-соединение с удаленным сервером с помощью PHP через командную строку в Mac OS X 10.6. В настоящее время я использую функцию PHP proc_open для выполнения следующей команды:
ssh -t -t -p 22 [email protected]
Это почти работает. Предполагается, что параметры -t -t
вызывают псевдотерминал, что они почти и делают. Я могу ввести пароль SSH и нажать Enter. Однако после нажатия Enter терминал просто зависает. Ни вывода, ничего - как будто сеанс SSH не удался. Я не могу запускать команды или что-то еще, и мне приходится убивать все это, используя Ctrl + C. Я знаю, что вход в систему выполнен успешно, потому что я могу выполнить команду типа ssh -t -t -p 22 [email protected] "ls -la"
и получить правильный вывод.
Я подумал, что проблема должна быть связана с тем, что я использовал стандартные каналы в своем вызове proc_open, поэтому я заменил их на pty. Я получаю следующую ошибку: "псевдотерминал pty не поддерживается в этой системе..."
Mac OS X просто не поддерживает pty или псевдотерминалы? (Я новичок в использовании всей этой терминологии оболочки).
Вот PHP-код:
$descriptorspec = array(0 => array("pty"), 1 => array("pty"), 2 => array("pty"));
$cwd = getcwd();
$process = proc_open('ssh -t -t -p 22 [email protected]', $descriptorspec, $pipes, $cwd);
if (is_resource($process))
{
while (true)
{
echo(stream_get_contents($pipes[1]));
$status = proc_get_status($process);
if (! $status["running"])
break;
}
}
(Извините, я не могу понять инструкции по форматированию SO...)
Что я делаю неправильно? Почему я не могу использовать pty? Это просто невозможно в Mac OS X? Спасибо за вашу помощь!
`
. - person BoltClock   schedule 05.11.2010