Windowsboxからパテを使ってLinuxボックスに接続します。その後、私は次のことを行います:
サーバーA:
serverA: file /etc/motd
/etc/motd: : ASCII English text
サーバー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
再定義された出力にCRとLFが含まれるのはなぜですか?これは、sshの-tオプションでのみ発生します。 -sudoを使用してsshログインでコマンドを実行する必要がある場合はtが必要です。たとえば:
serverB: ssh -t [email protected] "sudo cat /etc/shadow" > /etc/shadow
推測してくれてありがとう
承認された回答:
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
これらは異なる場合がありますが、デフォルトでssh -t
の下に表示されます。 そのigncr
「CRを無視する」は、入力では無効になっており、出力ではonlcr
が設定され(NLをCR-NLにマップ)、それ以外の場合、CRはマングルまたは省略されません。 stty(1)
でこれらの用語を検索できます マニュアル、およびtermios(4)
も参照してください (Linuxは他のmanセクションに配置する可能性があります)。
設定をいじることもできます(ただし、これは何らかの理由でonlcr
が必要なことを壊す可能性があります セット):
$ 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
$
代わりにscp
を使用する方が賢明かもしれません またはsftp
データをコピーして、(疑似)tty CR/NL処理がファイルの内容に変更を加えるリスクを排除します。