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.