Caracteres de escape SSH y transferencia de archivos binarios
Una ventaja que no se ha mencionado en las otras respuestas es que cuando se opera sin un pseudo-terminal , los caracteres de escape SSH como no~C
son compatibles ; Esto hace que sea seguro para los programas transferir archivos binarios que pueden contener estas secuencias.
Prueba de concepto
Copie un archivo binario usando un pseudo-terminal:
$ ssh -t anthony@remote_host 'cat /usr/bin/free' > ~/free
Connection to remote_host closed.
Copie un archivo binario sin usar un pseudo-terminal:
$ ssh anthony@remote_host 'cat /usr/bin/free' > ~/free2
Los dos archivos no son lo mismo:
$ diff ~/free*
Binary files /home/anthony/free and /home/anthony/free2 differ
El que se copió con un pseudo-terminal está dañado:
$ chmod +x ~/free*
$ ./free
Segmentation fault
mientras que el otro no es:
$ ./free2
total used free shared buffers cached
Mem: 2065496 1980876 84620 0 48264 1502444
-/+ buffers/cache: 430168 1635328
Swap: 4128760 112 4128648
Transferencia de archivos a través de SSH
Esto es particularmente importante para programas como scp
o rsync
que usan SSH para la transferencia de datos. Esta descripción detallada de cómo funciona el protocolo SCP explica cómo el protocolo SCP consiste en una mezcla de mensajes de protocolo de texto y datos de archivos binarios.
OpenSSH ayuda a protegerte de ti mismo
Vale la pena señalar que incluso si -t
se usa el indicador, el ssh
cliente OpenSSH se negará a asignar un pseudo-terminal si detecta que su stdin
flujo no es un terminal:
$ echo testing | ssh -t anthony@remote_host 'echo $TERM'
Pseudo-terminal will not be allocated because stdin is not a terminal.
dumb
Todavía puede forzar al cliente OpenSSH a asignar un pseudo-terminal con -tt
:
$ echo testing | ssh -tt anthony@remote_host 'echo $TERM'
xterm
En cualquier caso, (sensiblemente) no le importa si stdout
o stderr
se redirige:
$ ssh -t anthony@remote_host 'echo $TERM' >| ssh_output
Connection to remote_host closed.