GNU/Linux >> Linux Esercitazione >  >> Linux

Perché l'opzione Ssh -t aggiunge Cr e Lf nell'output reindirizzato?

Mi collego dal mio windowsbox con stucco a un box linux. Dopo di che faccio quanto segue:

sul server A:

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

sul server 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

Perché l'output reindirizzato ora ha CR e LF? Questo accade solo con l'opzione -t da ssh. -t è necessario se devo eseguire comandi su un login ssh con sudo. come ad esempio:

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

Grazie per i tuoi suggerimenti

Risposta accettata:

Ispeziona le impostazioni 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

Questi possono variare, ma qui lo mostrano per impostazione predefinita in ssh -t che igncr "ignore CR" è disabilitato sull'input e per l'output quel onlcr è impostato (mappa da NL a CR-NL) e che le CR non vengono altrimenti alterate o omesse. Si possono cercare questi termini nel stty(1) manuale e vedere anche termios(4) (che Linux potrebbe inserire in qualche altra sezione man).

Le impostazioni possono anche essere manipolate (ma ciò potrebbe tuttavia interrompere le cose che per qualche motivo hanno bisogno di onlcr impostato):

$ 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
$ 

Potrebbe essere più sensato usare invece scp o sftp copiare i dati per eliminare il rischio che la (pseudo)tty gestione di CR/NL causi modifiche al contenuto dei file.


Linux
  1. Il curl ha un timeout?

  2. Ssh – Come funziona Tcp-keepalive in Ssh?

  3. Perché `esce &` non funziona?

  4. Perché un programma con Fork() a volte stampa il suo output più volte?

  5. Perché questa pipeline di shell termina?

Perché Unix Time inizia al 1970-01-01?

Perché Ls -l genera una dimensione diversa da Ls -s?

Perché stdout necessita di uno svuotamento esplicito quando viene reindirizzato al file?

Perché il mio accesso SSH è lento?

Perché l'output di alcuni programmi Linux non va né a STDOUT né a STDERR?

Perché rsync su SSH mi offre un throughput 10 volte superiore a quello di SCP?