У меня была точно такая же проблема, и это сводило меня с ума. Я немного опоздал на вечеринку, но я решил опубликовать решение, которое решило мою проблему на тот случай, если кто-то еще столкнется с этой темой и столкнется с такой же проблемой.
Мои симптомы были такими же, как у ОП. Я запускал PHP-скрипт, он запускал Expect-скрипт через shell_execute, а потом просто зависал навсегда. Проблема оказалась из-за следующего вопроса, который задавался пользователю apache при запуске сценария Expect:
Подлинность хоста 'xx.xx.xx.xx
(xx.xx.xx.xx) 'не может быть установлено.
Отпечаток ключа RSA - ххххх. Ты
уверен, что вы хотите продолжить подключение
(Да / нет)?
Этот вопрос не возник бы у меня, когда я запустил скрипт из командной строки, так как считаю, что вопрос задается только один раз, если хост добавлен в список хостов.
Чтобы исправить проблему, я добавил этот код перед местом, где я ввел пароль:
expect "*you sure you want to continue*"
send -- "yes\r"
Это привело к этому (мой PHP-скрипт возвращал все выходные данные из сценария Expect):
Подлинность хоста 'xx.xx.xx.xx
(xx.xx.xx.xx) 'не может быть установлено.
Отпечаток ключа RSA - ххххх. Ты
уверен, что вы хотите продолжить подключение
(да нет)?
да Не удалось добавить хост в список известных хостов (/var/www/.ssh/known_hosts).
Однако сразу после этого появилось приглашение на ввод пароля, и пароль был введен правильно. С этого момента сценарий Expect работал нормально.