Ответ 1
Когда вы заходите или проходите через php, ваш сеанс не выделяется pty. Я использовал каждое из следующих решений:
ANSWER 1: используйте ssh -t или ssh -tt, чтобы получить pty при входе в систему, используя ssh:
Мне было очень весело получать команды для запуска справа из-за pty при выполнении таких сеансов: jenkins shell → ssh driver → ssh test → docker exec. Хороший ответ здесь: https://unix.stackexchange.com/questions/105422/command-must-be-run-from-a-terminal
"Попробуйте параметр -t для ssh. Если это не работает, попробуйте -tt."
"- t Назначить псевдо-tty-распределение. Это можно использовать для выполнения произвольных программ на экране на удаленной машине, что может быть очень полезно, например, при реализации сервисов меню. Множественные опции -t принудительно распределяют tty, даже если ssh не имеет локального tty."
ANSWER 2: использовать docker run -t... и docker exec -it
Используйте параметры -t и -it для размещения pty в сеансе exec docker.
Также с помощью docker exec вы можете просто использовать опцию -u для входа в контейнер в качестве разных пользователей и избегать использования su. например
$ docker exec -u root -it small_hypatia bash
Здесь есть хороший вопрос и ответ: https://github.com/docker/docker/issues/8631
ANSWER 3: используйте python для создания pty в вашей оболочке
Довольно милый взлом:)
[email protected]:~$ su -
su: must be run from a terminal
$ echo "import pty; pty.spawn('/bin/bash')" > /tmp/asdf.py
$ python /tmp/asdf.py
$ su -
Password:
[email protected]:~#