Jaki jest cel pseudo-tty?


Najlepsza odpowiedź

Uruchamianie programów na terminalu zapewnia dodatkową funkcjonalność, której nie ma, gdy uruchamiasz programy jako zadania wsadowe . Na przykład, jeśli uruchomisz proces na terminalu, możesz go przerwać, naciskając Ctrl + C, ale jeśli proces nie jest powiązany z żadnym terminalem, nie możesz go przerwać za pomocą Ctrl + C, zamiast tego prawdopodobnie aby uruchomić kill lub coś w tym rodzaju. Terminale są wyjaśnione bardziej szczegółowo w tej odpowiedzi.

Zdalny proces sshd używa pary pseudoterminalów, aby przyjąć rolę klawiatury i ekranu. Gdyby zdalny proces czytał z „prawdziwego” terminala, takiego jak /dev/tty1, to otrzymywałby dane wejściowe bezpośrednio z klawiatury. Zamiast tego proces sshd przekazuje naciśnięcia klawiszy do procesu zdalnego, zapisując je na głównym końcu pseudoterminala. Program, który „uruchamiasz, odbiera dane na końcu slave pseudoterminala, tak jakby pochodziły z klawiatury. Podobnie, gdy proces zapisuje na końcu slave pseudoterminala, ma złudzenie, że „pisze do” prawdziwego „terminala, który drukowałby znaki na ekranie. Ale zamiast tego sshd odczytuje dane zapisane po stronie głównej, szyfruje je i wysyła z powrotem do Ciebie.

Aby zobaczyć, co dzieje się bez terminala , spróbuj uruchomić coś takiego jak ssh -T remote.host. Uruchomi powłokę na zdalnym hoście, ale powłoka nie będzie zawracać sobie głowy wydrukowaniem monitu, ponieważ nie ma terminala, więc uważa, że ​​działa w trybie wsadowym. Nie możesz też uruchomić sudo na zdalnym hoście, ponieważ sudo wymaga wpisania hasła na terminalu zamiast czytania ze standardowego wejścia.

Domyślnie zdalny sshd przydzieli pty tylko wtedy, gdy nie określisz polecenia. Jeśli spróbujesz ssh remote.host screen, „zobaczysz, że podanie polecenia blokuje alokację pty i znowu będziesz miał kłopoty. Aby tego uniknąć, określ opcję -t, a następnie zdalny sshd będzie zawsze próbował przydzielić terminal.

… chyba że na lokalnym końcu nie ma terminala, z którym można rozmawiać, na przykład jeśli ssh czyta z pliku. W takim przypadku możesz wymusić alokację pty, używając ssh -t -t. Może to mieć niezamierzone efekty, ponieważ zdalny koniec będzie reagował na każdy bajt zapisany na standardowym wejściu ssh, tak jakby został wpisany z klawiatury. Na przykład Ctrl + C w klawiatura tworzy kod ASCII 3, więc jeśli lokalny ssh powinien odczytać bajt o wartości 3 ze swojego pliku wejściowego, przekaże go do zdalnego hosta, zdalny sshd zapisze go na głównym końcu pty, a jądro wyśle ​​SIGINT do procesu odczytującego z końca slave. Terminale są interesującymi stworzeniami.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *