Normalny sposób połączenia z serwerem SSH to ssh username@ip_address
. Ale użytkownik może chcieć uruchomić program tylko na zdalnym komputerze. Więc nazwa programu następuje po normalnym argumencie, którym jest ssh username@ip_address <program_name>
. Na przykład ssh username@ip_address ls
. Ten argument jest w porządku, z wyjątkiem programów interaktywnych (które również akceptują dane wejściowe użytkownika, a także zapewniają dane wyjściowe) np top
. Dane wyjściowe to
Zmienna środowiskowa TERM nie jest ustawiona.
co oznacza, że żaden (pseudo-) terminal nie jest podłączony między programami sshd i top. Rozwiązaniem jest dodanie argumentu w -t
miejscu, w którym teraz staje się całe polecenie ssh -t username@ip_address top
.
Moje pytanie brzmi: dlaczego sshd domyślnie nie może również używać pseudo-terminala do komunikacji z programami nieinteraktywnymi, więc nie ma potrzeby dodawania -t
argumentu dla programów interaktywnych?
RequestTTY yes
(lubforce
) w swojej konfiguracji.top
może działać w trybie wsadowym.Odpowiedzi:
To prawda, że, jak powiedzieli inni, PTY mają pewien narzut - ale głównym powodem nieużywania PTY podczas uruchamiania polecenia zdalnego jest utrata informacji.
Zwykle po uruchomieniu polecenia zdalnie przez ssh polecenie
stdout
istderr
strumienie są wysyłane do lokalnegostdout
istderr
, co oznacza, że możesz je przekierować / potokować osobno - na przykład:Ale jeśli używasz PTY, wszystkie dane wyjściowe trafiają do
stdout
, ponieważ PTY nie mają oddzielnych strumieni dla danych wyjściowych / błędów:źródło
-t
powinna to być domyślna opcja wymagana do jej wyłączenia, więc naprawdę niewielka przewaga wydajności jest dla mnie najbardziej sensowna w przypadkach, w których nie ma to znaczenia.Strona podręcznika
ssh
opisuje to:Jest to cecha i prawdopodobnie spowodowana historycznymi przyczynami
rsh
zachowania. To całkiem rozsądne. Większość poleceń naprawdę nie jest interaktywna i przydzielanie PTY nie jest darmową operacją (co było ważniejsze 20 lat temu).źródło
rsh
jest niejasny, ponieważ ten program nie ma odpowiedniej opcji.rsh
, ale z pewnością istnieje pewien wpływ, nie w opcjach, ale w zachowaniursh
irlogin
(jeśli jest polecenie, czy nie). Nie można uruchomić komendy interaktywnej (jak łotrzyk (6) lub vi (1)) przy użyciu rsh; zamiast tego użyj rlogin (1). .Jak
ssh
przypuszczać, czy wywoływane polecenie jest interaktywne, czy nie?Ten koszmar nasila się, gdy zdajesz sobie sprawę, że możesz logować się na maszynie z systemem operacyjnym innym niż Unix.
Ponieważ nie ma łatwego rozwiązania, jedna skrzynka musi być domyślna.
źródło