Я пытаюсь установить интерактивное SSH-соединение с удаленным сервером, используя PHP через командную строку в Mac OS X 10.6. В настоящее время я использую функцию PHP proc_open для выполнения следующей команды:
ssh -t -t -p 22 user@server.com
Это почти работает. Опции -t -t
должны вызывать псевдо-терминал, что они почти делают. Я могу ввести пароль SSH и нажать Enter. Однако после нажатия кнопки ввода терминал, кажется, просто зависает. Нет вывода, нет ничего - все равно, что сеанс SSH не удался. Я не могу запускать команды или что-то еще, и мне приходится убивать все это с помощью Ctrl + C. Я знаю, что вход в систему успешен, потому что я могу выполнить команду типа ssh -t -t -p 22 user@server.com "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 user@server.com', $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? Спасибо за вашу помощь!