GNU/Linux >> Znalost Linux >  >> Linux

Proč možnost Ssh -t přidává Cr &Lf do přesměrovaného výstupu?

Připojuji se ze svého windowsboxu pomocí Putty k linuxovému boxu. Poté udělám následující:

na serveru A:

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

na serveru 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

Proč má nyní přesměrovaný výstup CR &LF? To se stane pouze s volbou -t z ssh. -t je potřeba, pokud potřebuji spouštět příkazy na přihlášení ssh pomocí sudo. jako například:

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

Děkujeme za vaše návrhy

Přijatá odpověď:

Zkontrolujte nastavení 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

Ty se mohou lišit, ale zde je to standardně uvedeno pod ssh -t že igncr „ignore CR“ je zakázáno na vstupu a pro výstup je to onlcr je nastaven (mapuje NL na CR-NL) a že CR nejsou jinak pozměněny ani vynechány. Tyto termíny lze vyhledat v stty(1) manuál a viz také termios(4) (který linux může umístit do nějaké jiné man sekce).

S nastavením si lze také pohrát (to však může narušit věci, které z nějakého důvodu vyžadují onlcr set):

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

Může být rozumnější místo toho použít scp nebo sftp kopírovat data, aby se eliminovalo riziko (pseudo)taktní manipulace s CR/NL způsobující změny obsahu souboru.


Linux
  1. Proč substituce příkazů Shell pohltí znak na konci nového řádku?

  2. Proč Sudo ignoruje aliasy?

  3. Ssh – Jak Ssh vyzve k zadání hesla, když jsou všechny vstupy a výstupy přesměrovány?

  1. Má Curl časový limit?

  2. Ssh – Proč je Firefox tak pomalý oproti Ssh?

  3. Proč program s Fork() někdy tiskne svůj výstup vícekrát?

  1. Přesměrování výstupu subshell do procesu?

  2. Proč tento plášťový ropovod vystupuje?

  3. Proč je moje přihlášení přes SSH pomalé?