Znaki specjalne SSH i przesyłanie plików binarnych
Jedną z zalet, o której nie wspomniano w innych odpowiedziach, jest to, że podczas działania bez pseudoterminalu znaki specjalne SSH, takie jak nie~C
są obsługiwane ; dzięki temu programy mogą bezpiecznie przesyłać pliki binarne, które mogą zawierać te sekwencje.
Dowód koncepcji
Skopiuj plik binarny za pomocą pseudo-terminala:
$ ssh -t anthony@remote_host 'cat /usr/bin/free' > ~/free
Connection to remote_host closed.
Skopiuj plik binarny bez użycia pseudo-terminala:
$ ssh anthony@remote_host 'cat /usr/bin/free' > ~/free2
Dwa pliki nie są takie same:
$ diff ~/free*
Binary files /home/anthony/free and /home/anthony/free2 differ
Ten, który został skopiowany z pseudo-terminalem, jest uszkodzony:
$ chmod +x ~/free*
$ ./free
Segmentation fault
podczas gdy drugi nie jest:
$ ./free2
total used free shared buffers cached
Mem: 2065496 1980876 84620 0 48264 1502444
-/+ buffers/cache: 430168 1635328
Swap: 4128760 112 4128648
Przesyłanie plików przez SSH
Jest to szczególnie ważne w przypadku programów takich jak scp
lub rsync
wykorzystujących SSH do przesyłania danych. Ten szczegółowy opis działania protokołu SCP wyjaśnia, w jaki sposób protokół SCP składa się z mieszanki komunikatów protokołu tekstowego i danych pliku binarnego.
OpenSSH pomaga chronić cię przed sobą
Warto zauważyć, że nawet jeśli -t
używana jest flaga, ssh
klient OpenSSH odmówi przydzielenia pseudo-terminala, jeśli wykryje, że jego stdin
strumień nie jest terminalem:
$ echo testing | ssh -t anthony@remote_host 'echo $TERM'
Pseudo-terminal will not be allocated because stdin is not a terminal.
dumb
Nadal możesz zmusić klienta OpenSSH do przydzielenia pseudo-terminala za pomocą -tt
:
$ echo testing | ssh -tt anthony@remote_host 'echo $TERM'
xterm
W obu przypadkach (rozsądnie) nie ma znaczenia, stdout
czy nastąpi stderr
przekierowanie:
$ ssh -t anthony@remote_host 'echo $TERM' >| ssh_output
Connection to remote_host closed.