Kiedy wchodzisz lub wchodzisz przez php, sesja nie jest przydzielana pty. Użyłem każdej z następujących rozwiązań:
Odpowiedź 1: ssh -t lub ssh -tT aby pty przydzielane podczas logowania ssh:
miałem wielką zabawę z dostaniem poleceń uruchomić prawy powodu do ptys podczas uruchamiania sesji takich jak ta: powłoka jenkinsa -> sterownik ssh -> test ssh -> execer exec. Dobra odpowiedź tutaj: https://unix.stackexchange.com/questions/105422/command-must-be-run-from-a-terminal
"Wypróbuj opcję -t dla ssh. Jeśli to nie działa, spróbuj -tt."
"-t Wymuś alokację pseudo-tty, która może być użyta do wykonania dowolnych programów ekranowych na zdalnym komputerze, co może być bardzo przydatne, np. Przy wdrażaniu usług menu. Wiele opcji -t wymusza alokację tty, nawet jeśli ssh nie ma lokalnego tty. "
ODPOWIEDŹ 2: Zastosowanie doker run -t ... i doker Exec -To
pomocą -t i opcje -it przydzielić pty w sesji doker Exec.
Również z funkcją dokowania exec można po prostu użyć opcji -u, aby zalogować się do kontenera jako inni użytkownicy i unikać używania su. na przykład
$ docker exec -u root -it small_hypatia bash
Jest to dobre pytanie i odpowiedź na ten temat tutaj: https://github.com/docker/docker/issues/8631
ODPOWIEDŹ 3: Zastosowanie pyton na tarło do pty w swojej skorupie
Całkiem ładny Hack :)
jenkin[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]:~#
Chciałbym dowiedzieć się więcej o Twoim przypadku użycia/konfiguracji. Uruchamianie SSH w kontenerze to anty-wzór. Czy chcesz zmienić użytkownika w locie (gdy jesteś "w" kontenerze?) Lub jako część procesu kompilacji (używając pliku Dockerfile?). – johnharris85
Jeśli Google wyświetli ten komunikat o błędzie, istnieje kilka rozwiązań. –
Dziękuję Ci za pomoc odświeżania ciepła. Znalazłem obejście z pytonem, ale potrzebowałem spójnego rozwiązania. – SaintHUN