Caratteri di escape SSH e trasferimento di file binari
Un vantaggio che non è stato menzionato nelle altre risposte è che quando si opera senza uno pseudo-terminale , i caratteri di escape SSH come quelli non~C sono supportati ; questo rende sicuro per i programmi il trasferimento di file binari che possono contenere queste sequenze.
Verifica teorica
Copia un file binario usando uno pseudo-terminale:
$ ssh -t anthony@remote_host 'cat /usr/bin/free' > ~/free
Connection to remote_host closed.
Copia un file binario senza usare uno pseudo-terminale:
$ ssh anthony@remote_host 'cat /usr/bin/free' > ~/free2
I due file non sono uguali:
$ diff ~/free*
Binary files /home/anthony/free and /home/anthony/free2 differ
Quello che è stato copiato con uno pseudo-terminale è danneggiato:
$ chmod +x ~/free*
$ ./free
Segmentation fault
mentre l'altro non è:
$ ./free2
total used free shared buffers cached
Mem: 2065496 1980876 84620 0 48264 1502444
-/+ buffers/cache: 430168 1635328
Swap: 4128760 112 4128648
Trasferimento di file su SSH
Ciò è particolarmente importante per programmi come scpo rsyncche utilizzano SSH per il trasferimento di dati. Questa descrizione dettagliata di come funziona il protocollo SCP spiega come il protocollo SCP consista in una combinazione di messaggi di protocollo testuali e dati di file binari.
OpenSSH ti aiuta a proteggerti da te stesso
Vale la pena notare che anche se -tviene utilizzato il flag, il sshclient OpenSSH rifiuterà di allocare uno pseudo-terminale se rileva che il suo stdinflusso non è un terminale:
$ echo testing | ssh -t anthony@remote_host 'echo $TERM'
Pseudo-terminal will not be allocated because stdin is not a terminal.
dumb
Puoi comunque forzare il client OpenSSH a allocare uno pseudo-terminale con -tt:
$ echo testing | ssh -tt anthony@remote_host 'echo $TERM'
xterm
In entrambi i casi, (sensibilmente) non importa se stdouto stderrvengono reindirizzati:
$ ssh -t anthony@remote_host 'echo $TERM' >| ssh_output
Connection to remote_host closed.