Я пытаюсь установить интерактивное соединение SSH с удаленным сервером с помощью PHP через командную строку в Mac OS X 10.6. В настоящее время я использую функцию proc_open PHP, чтобы выполнить следующую команду:Как я могу использовать PHP для установки интерактивной сессии SSH?
ssh -t -t -p 22 [email protected]
Это почти работает. Предполагается, что параметры -t -t
вынуждают псевдотерминал, который они почти делают. Я могу ввести пароль SSH и нажать enter. Однако после нажатия введите терминал, который просто зависает. Нет вывода, ничего нет - это похоже на неудачный сеанс SSH. Я не могу запускать команды или что-то еще и должен убить все это, используя Ctrl + C. Я знаю, что логин успешный, потому что я могу выполнить команду, как ssh -t -t -p 22 [email protected] "ls -la"
и получить правильный вывод.
Я думал, что проблема должна быть связана с тем, что я использовал стандартные трубки в моем вызове proc_open, поэтому я заменил их на pty. Я получаю следующую ошибку: «pty pseudo terminal не поддерживается в этой системе ...»
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;
}
}
(К сожалению - не могу за жизнь мне понять, ТАК это форматирование инструкции ...)
Что я делаю неправильно? Почему я не могу использовать pty? Это просто невозможно в Mac OS X? Спасибо за вашу помощь!
Я установил форматирование для вас. Чтобы форматировать блоки кода, просто добавьте четыре пробела в начало каждой строки кода. Для форматирования встроенных образцов кода используются обратные элементы '\' '. – BoltClock
Если вы укажете причину открытия SSH с PHP, возможно, мы сможем найти другие способы достижения того, что вы пытаетесь сделать. –
Я пытаюсь открыть SSH-соединение в PHP, потому что я работаю над инфраструктурой развертывания, которая будет автоматизировать развертывание кода на удаленном сервере, вроде как Capistrano. Основная задача состоит в том, чтобы иметь возможность проверять код из хранилища Subversion/Git/Bazaar и автоматизировать другие задачи. – Cameron