GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué la opción Ssh -t agrega Cr y Lf en la salida redirigida?

Me conecto desde mi windowsbox con masilla a una caja de linux. Después de eso hago lo siguiente:

en el Servidor A:

serverA: file /etc/motd
/etc/motd: : ASCII English text

en el servidor B:

serverB: ssh -t [email protected] "cat /etc/motd" > /etc/motd.serverA
serverB: file /etc/motd.serverA
/etc/motd.serverA:  ASCII text, with CRLF line terminators

¿Por qué la salida redirigida ahora tiene CR y LF? Esto sucede solo con la opción -t de ssh. -t es necesario si necesito ejecutar comandos en un inicio de sesión ssh con sudo. como por ejemplo:

serverB: ssh -t [email protected] "sudo cat /etc/shadow" > /etc/shadow

Gracias por tus sugerencias

Respuesta aceptada:

Inspeccione la configuración de TTY.

$ ssh -t somewhere 'stty -a' | grep cr
iflags: -istrip icrnl -inlcr -igncr -iuclc ixon -ixoff ixany imaxbel
oflags: opost onlcr -ocrnl -onocr -onlret -olcuc oxtabs -onoeot
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -mdmbuf

Estos pueden variar, pero muestran aquí que por defecto bajo ssh -t que igncr "ignorar CR" está deshabilitado en la entrada, y para la salida que onlcr está configurado (mapea NL a CR-NL) y que CR no se altera ni se omite de otra manera. Uno puede buscar estos términos en stty(1) manual, y ver también termios(4) (que Linux puede colocar en alguna otra sección de man).

La configuración también se puede modificar (pero esto, sin embargo, puede romper cosas que, por alguna razón, necesitan onlcr conjunto):

$ ssh -t somehost 'stty onlcr; cat /etc/motd' > x ; file x
x: ASCII English text, with CRLF line terminators
$ ssh -t somehost 'stty -onlcr; cat /etc/motd' > x ; file x
x: ASCII English text
$ 

Puede ser más sensato usar en su lugar scp o sftp para copiar datos para eliminar el riesgo de que el manejo de (pseudo)tty CR/NL provoque cambios en el contenido del archivo.


Linux
  1. ¿Redirigiendo una salida de un subshell a un proceso?

  2. Ssh - ¿Por qué Firefox es tan lento sobre Ssh?

  3. Ssh:¿cómo funciona TCP-keepalive en Ssh?

  4. ¿Por qué Ls -l produce un tamaño diferente de Ls -s?

  5. ¿Por qué clang genera texto ininteligible cuando se redirige?

¿Por qué un programa con Fork() a veces imprime su salida varias veces?

¿Por qué sale esta canalización de shell?

¿Por qué stdout necesita un vaciado explícito cuando se redirige al archivo?

¿Por qué mi inicio de sesión SSH es lento?

¿Por qué la salida de algunos programas de Linux no va ni a STDOUT ni a STDERR?

¿Por qué rsync sobre SSH me da 10 veces el rendimiento de SCP?