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 scp
o rsync
che 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 -t
viene utilizzato il flag, il ssh
client OpenSSH rifiuterà di allocare uno pseudo-terminale se rileva che il suo stdin
flusso 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 stdout
o stderr
vengono reindirizzati:
$ ssh -t anthony@remote_host 'echo $TERM' >| ssh_output
Connection to remote_host closed.