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.