Kiedy ssh -t nie byłoby właściwe zamiast ssh?

15

Używanie ssh -tzamiast sshpołączeń ze zdalnymi serwerami ma kilka zalet. Na przykład mogę bezpośrednio edytować plik za pomocą vim:, ssh -t host vim foo.txtinaczej w przeciwnym razie by się nie udało.

Czy są jakieś okoliczności, w których przydzielanie (pseudo) molo byłoby złe podczas korzystania z ssh?

Alex J.
źródło

Odpowiedzi:

11

Podczas pipetowania danych wejściowych lub odzyskiwania danych wejściowych, co jest typowym zastosowaniem polecenia „ssh host command”. Znaki kontrolne mogą być interpretowane przez warstwę TTY (^ S np.)

niXar
źródło
10

Tak, czasami chcesz nawiązać ciche połączenie w tle, na przykład podczas konfigurowania tunelu (np. Proxy SOCKS). W takich przykładach chcesz, aby proces NIE miał tty.

Oto przykład konfiguracji przekierowania portów z hosta lokalnego na hosta zdalnego ...

ssh -l username -fNTL 8073:server:873

Po skonfigurowaniu tego, możesz następnie rsync do localhost, zamiast do zdalnego hosta, a zatem skutecznie, tunelując rsync przez ssh...

rsync --port=8073 -a me@localhost::myStuff /tmp/myStuff/

Zrobiłbyś to, gdyby rsync wychodzący serverbył zablokowany, ale sshnie był.

Kserkses
źródło
Dzięki, to też było słuszne, ale głosowałem na drugą, ponieważ przeoczyłem poważniejszą kwestię.
Alex J
3

W dodatku do powyższego...

(1) Różne sposoby postępowania z ucieczką tilda:

„~”. Escape rozłączy cię, jeśli masz pty (-t). W przypadku długotrwałego polecenia możesz chcieć zapobiec przypadkowemu zatrzymaniu procesu przez kogoś, kto wpisze ~.

$ ssh nazwa_hosta.tomontime.com -t sleep 60
[type ~. i rozłącza się]
Połączenie z hostname.tomontime.com zostało zamknięte.

$ ssh nazwa hosta -T spać 60
[Wpisuję ~. i traktuje to jak normalne naciśnięcia klawiszy, które ignoruje polecenie uśpienia.]
~.
~.

Spróbuj tego samego z CTRL-C. Zobaczysz, że z -t wysyłasz CTRL-C do „uśpienia”. Z -T wysyłasz CTRL-C do programu ssh uruchomionego na twoim komputerze. Może się zdarzyć, że to robi różnicę (tj. Program obsługuje INT inaczej niż HUP)

(2) Chcesz po prostu zminimalizować aktywność pty lub połączenia sieciowego.

Podczas próby ponownego uruchomienia komputera, który nie ma ptys, nie chcesz zachęcać systemu do próby przydzielenia pty! To również minimalizuje połączenia sieciowe, które będą musiały zostać zamknięte (opóźniając ponowne uruchomienie).

Będzie to działać szybciej i bardziej niezawodnie:
ponowne uruchomienie nazwy hosta ssh -T

Może to powodować problemy:
ponowne uruchomienie hosta ssh -t

TomOnTime
źródło
2

ssh -t tworzy pseudo terminal na zdalnym komputerze. Jest to przydatne, jeśli łączysz polecenia ssh z wieloma serwerami i chcesz mieć prawdziwy terminal po drugiej stronie (abyś mógł na przykład użyć „vi”).

Możesz NIE chcieć „-t”, gdy skrypty logowania zachowują się inaczej, jeśli istnieje terminal. Jest to zła praktyka IMHO, ale widziałem przypadki, w których skrypt logowania sprawdza TTY przed 1) ustawieniem monitu i 2) rozszerzeniem ścieżki do wielu interaktywnych aplikacji.

W innym przypadku (wspomnianym powyżej przez TomOnTime) faktycznie natknąłem się na przypadki, w których wszystkie TTY (ptys) są zużyte. Oczywiście błędna konfiguracja, ale nie trzeba żuć zasobu dla kilku tuneli i rsyncs.

ericslaw
źródło